Nic*_*ick 2 shell bash alias quoting
我经常做的一件事是编辑最近修改过的文件,所以我想我会在 ~/.bash_profile 文件中创建一些快捷方式,而不是键入“ls -lr”然后“vim lastfile”:
alias via="vim `ls -rt | tail -1`"
alias vib="vim `ls -rt | tail -2 | head -1`"
alias vic="vim `ls -rt | tail -3 | head -1`"
alias vid="vim `ls -rt | tail -4 | head -1`"
alias vie="vim `ls -rt | tail -5 | head -1`"
Run Code Online (Sandbox Code Playgroud)
问题是,奇怪的是,这些命令不起作用。他们打开了一些不是最后一个的文件,甚至从当前目录中删除了一个文件(我想知道目录中是否存在某种文件缓存更新问题。这发生在我的本地机器和我的集群上)从事于)。
但是,如果我vim `ls -rt | tail -1`直接键入而不使用别名,则每次都可以使用。
问题是您需要在别名定义中引用反引号。双引号 ( ") 不引用命令替换。您将需要单引号 ( ')。用
alias via='vim `ls -rt | tail -1`'
Run Code Online (Sandbox Code Playgroud)
虽然你实际上想要:
alias via='vim -- "$(ls -t | head -n 1)"'
Run Code Online (Sandbox Code Playgroud)
那是:
$(...))。--标记的选项结束vim(否则它不会为开头的文件名工作-或+)。ls -t | head而不是ls -rt | tail更快地获得结果。不使用
alias via="vim `ls -rt | tail -1`"
Run Code Online (Sandbox Code Playgroud)
如果这样做,命令替换会在您定义别名时发生,而不是在您运行它时发生。尝试键入alias via以查看输出实际上alias via='vim `ls -rt | tail -1`'不是alias via='vim <prematurely expanded output>'。