为何.bashrc中定义的获取目录最新文件的环境变量不会更新?
错误原因
你的写法核心问题出在命令替换的执行时机,同时还存在排序逻辑的小问题:
- 命令替换执行时机错误
你用双引号包裹赋值语句,`ls foldername/ | tail -n 1`这个命令替换会在.bashrc被加载时(即新开终端/登录shell的那一刻)执行一次,执行后得到的固定文件名会直接写死到DUMMY变量的值里。后续你每次调用$DUMMY都是直接读取已经存好的固定字符串,不会重新执行ls命令取最新文件,自然不会更新。 - 排序逻辑不符合需求
默认ls是按文件名首字母排序的,你用tail -n 1取到的是字母序排在最后的文件,而不是修改时间最新的文件,如果你的需求是取最新修改的文件,这个排序逻辑本身也有问题。
正确解决方案
推荐用别名或者函数实现,两者都是在你每次调用的时候才会执行ls命令取最新值:
方案1:使用别名(最简便)
在.bashrc中添加如下内容,替换原来的export行:
alias DUMMY='less foldername/$(ls -t foldername/ | head -n 1)'
修改后执行source ~/.bashrc生效,之后每次输入DUMMY就会自动打开当前最新的文件。
方案2:使用函数(扩展性更好,适合后续加参数、加逻辑)
在.bashrc中添加如下内容:
DUMMY() { local latest_file="foldername/$(ls -t foldername/ | head -n 1)" less "$latest_file" }
同样执行source ~/.bashrc生效,使用方式和别名一致。
内容的提问来源于stack exchange,提问作者cercan
相关产品推荐
相关产品推荐

