1

我刚刚切换到 zsh,并将我的所有别名从 ~/.bash_profile 复制到 ~/.zshrc。几乎所有这些都是开箱即用的,但我用来快速杀死 nginx 的那个却没有。它使用 `` 从 pid 文件中为 kill 命令获取 pid 数据。它失败并显示以下内容:

cat: /usr/local/var/run/nginx.pid: 没有那个文件或目录

所以它试图在定义别名时运行它。我怎么可能解决这个问题?

编辑:别名的定义:

 alias knx="sudo kill -HUP `cat /usr/local/var/run/nginx.pid`"

谢谢!

马塞洛。

4

2 回答 2

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`

推荐阅读:环境变量中单引号和双引号有什么意义?

于 2012-06-04T23:09:17.893 回答
1

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

于 2012-06-04T21:43:24.923 回答