我刚切换到zsh,并将我的所有别名从〜/ .bash_profile复制到〜/ .zshrc。几乎所有这些都是开箱即用的,但我用来快速杀死nginx的那个并没有。它使用``从kill命令的pid文件中获取pid数据。它失败了以下内容:
cat:/usr/local/var/run/nginx.pid:没有这样的文件或目录
所以它正在尝试在定义别名时运行它。我怎么可能解决这个问题?
编辑:别名的定义:
alias knx="sudo kill -HUP `cat /usr/local/var/run/nginx.pid`"
谢谢!
马塞洛。
答案 0 :(得分:2)
变量和命令替换(即$foo
,$(foo)
和`foo`
)在双引号内执行。所以在定义别名时:
/usr/local/var/run/nginx.pid
不存在,则会看到该错误消息,别名变为sudo kill -HUP
。/usr/local/var/run/nginx.pid
存在且包含(比方说)42,则别名变为sudo kill -HUP 42
。在评估别名之前,您需要保护命令替换不受评估。
alias knx='sudo kill -HUP `cat /usr/local/var/run/nginx.pid`'
这使得knx
成为sudo kill -HUP `cat /usr/local/var/run/nginx.pid`
的别名。
推荐阅读:What is the significance of single and double quotes in environment variables?
答案 1 :(得分:1)
尝试单引号而不是双引号。