在'别名'中获取`pwd`?

时间:2011-04-06 12:09:00

标签: zsh zshrc

我可以通过pwd文件中的alias获取.zshrc吗?我正在尝试做类似以下的事情:

alias cleanup="rm -Rf `pwd`/{foo,bar,baz}"

这在bash中运行良好; pwd始终是我cd'进入的目录,但是在zsh中,它似乎是在首次加载.zshrc文件时进行评估,并始终作为我的主目录。我已经使用非常简单的alias设置进​​行了测试,但它永远不会改变。

如何进行此更改,以便从子目录调用alias始终评估为该子目录?

编辑:不确定这是否有用,但我在Mac上使用zsh通过oh-my-zsh。

1 个答案:

答案 0 :(得分:31)

加载.zshrc后,将评估alias命令。该命令由两个单词组成:命令名称(内置alias)和一个参数,它是展开cleanup="rm -Rf `pwd`/{foo,bar,baz}"的结果。由于反引号在双引号之间插值,因此该参数扩展为cleanup=rm -Rf /home/unpluggd/{foo,bar,baz}(这是一个单词shell),其中/home/unpluggd是当时的当前目录。

如果要在定义命令时避免插值,请改用单引号。这几乎总是你想要的别名。

alias cleanup='rm -Rf `pwd`/{foo,bar,baz}'

然而,这是不必要的复杂。文件名前面不需要`pwd/`!只需写下

alias cleanup='rm -Rf -- {foo,bar,baz}'

(如果--可能以foo开头,则需要-,以避免将其解析为rm的选项,这可以简化,因为不再需要牙箍:

alias cleanup='rm -Rf -- foo bar baz'