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>'
。
归档时间: |
|
查看次数: |
1675 次 |
最近记录: |