zsh别名失败了" sudo kill -HUP`cat /usr/local/var/run/nginx.pid`"

时间:2012-06-04 01:18:38

标签: alias zsh

我刚切换到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`"

谢谢!

马塞洛。

2 个答案:

答案 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)

尝试单引号而不是双引号。