【问题标题】:How to suppress messages from bash alias with pipe [duplicate]如何使用管道抑制来自bash别名的消息[重复]
【发布时间】:2018-11-11 03:48:04
【问题描述】:

我有这个别名来杀死所有的 neovim 实例:

alias killnvim="ps -ef | grep nvim | awk '{print $2}' | xargs kill &> /dev/null"

每次我运行它时它总是返回这个消息:

[1]    20958 done        ps -ef |
       20959 done        grep --color=auto nvim |
       20960 done        awk '{print }' |
       20961 terminated  xargs kill &> /dev/null

我应该怎么做才能隐藏该消息?我希望我的命令不输出任何内容。

如果有问题,我正在使用 zsh。

谢谢。

【问题讨论】:

  • 你使用 bash 还是 zsh?
  • killall nvim?
  • @Cyrus 不,这不是一种解决方法,使用killall 甚至更好的pkill 是正确的解决方案。 ps 和 grepping 结果是一个 hack。
  • 我很惊讶zsh 没有提供一种方法来通过其内置的kill 或通过像zkill 这样的模块来做到这一点。

标签: bash alias zsh


【解决方案1】:

除非你有充分的理由使用别名,否则最好使用函数:

killnvim () {
  ps -ef | grep nvim | awk '{print $2}' | xargs kill &> /dev/null
}

(也就是说,有更好的替代方法可以滚动您自己的管道以按名称杀死进程。)

【讨论】:

    【解决方案2】:

    这是一个引用问题。您需要将 {print $2} 放在单引号中,以便别名的调用不会将 $2 替换为值,并且整个别名都需要放在单引号中以阻止在定义时替换 $2。

    zsh 确实允许在单引号字符串中用一个引号替换两个单引号,但您需要设置一个选项以允许这样做。

    更便携的是使用以下内容:

    alias killnvim='ps -ef | grep nvim | awk '"'"'{print $2}'"'"' | xargs kill &> /dev/null'
    

    您也可以转义任何敏感字符,但上述方法似乎可行。

    【讨论】:

      猜你喜欢
      • 2021-06-29
      • 2020-10-17
      • 1970-01-01
      • 2015-08-10
      • 1970-01-01
      • 2012-06-20
      • 2016-11-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多