如何使用管道抑制来自bash别名的消息

时间:2018-06-01 04:14:49

标签: bash alias zsh

我有这个别名来杀死所有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。

感谢。

2 个答案:

答案 0 :(得分:0)

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

zsh允许在单引号字符串中用一个引号替换两个单引号,但是您需要设置一个允许该选项的选项。

更便携是使用以下内容:

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

您也可以转义任何敏感字符,但上述情况似乎有效。

答案 1 :(得分:0)

除非你有充分的理由使用别名,否则更喜欢一个函数:

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

(也就是说,有更好的选择来滚动你自己的管道以按名称杀死进程。)