【问题标题】:zsh alias failing for "sudo kill -HUP `cat /usr/local/var/run/nginx.pid`"“sudo kill -HUP `cat /usr/local/var/run/nginx.pid`”的 zsh 别名失败
【发布时间】:2012-06-04 01:18:37
【问题描述】:

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

谢谢!

马塞洛。

【问题讨论】:

  • 你没有告诉我们别名的定义,我们怎么知道?
  • 天啊!我对此感到非常抱歉。刚刚添加。

标签: alias zsh


【解决方案1】:

变量和命令替换(即$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?

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2019-12-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-26
      • 1970-01-01
      • 2012-08-13
      相关资源
      最近更新 更多