Unix别名命令无法按预期工作

时间:2010-03-09 11:55:37

标签: unix shell command-line alias ksh

我有一个命令可以杀死一些进程,如下所示:

kill -9 `psu|grep MF1pp|grep -v grep|awk '{print $2}'`

命令完全正常

>psu|grep MF1pp|grep -v grep|awk '{print $2}'
29390
29026
$>kill -9 `psu|grep MF1pp|grep -v grep|awk '{print $2}'`
$>psu|grep MF1pp|grep -v grep|awk '{print $2}'

当我创建如下的别名并运行它时:

alias killaf="kill -9 `psu|grep MF1pp|grep -v grep|awk '{print $2}'`"



$> psu|grep MF1pp|grep -v grep|awk '{print $2}'
5487
5272
$>killaf
ksh: kill: bad argument count

给出了上述错误。

谁能告诉我可能是什么问题?

4 个答案:

答案 0 :(得分:5)

您正在设置别名的命令行未正确引用。具体来说,back-quote embedded子命令在您设置别名时正在执行,而不是在您实际想要运行别名时执行。

尝试以这种方式进行设置:

alias killaf='kill -9 `psu|grep MF1pp|grep -v grep|awk '\''{print $2}'\''`'

编辑:我修改了awk命令周围的引号 - 当您已经单引号时嵌入单引号很棘手。

答案 1 :(得分:1)

这就是xargs的用途:

alias killaf='ps -fu $USER | awk '/[M]F1pp/ {print $2}' | xargs kill -9'

(未测试的)

BTW:我不知道为什么bash支持别名。我更喜欢使用函数:

killaf() { ps -fu $USER | awk '/[M]F1pp/ {print $2}' | xargs kill -9; }

答案 2 :(得分:0)

为什么要使用别名?使用子例程代替。我假设你的意思是ps命令,因为我不知道psu是什么

killmyprocess(){
  ps -eo pid,comm |awk '$2~/MF1pp/{
    cmd="kill -9 "$1
    print cmd
  #  system(cmd) #uncomment to use
  }'
}

答案 3 :(得分:-1)

尝试在awk中转义$,通常必须对其进行转义以使其正常工作:

alias killaf="kill -9 `psu|grep MF1pp|grep -v grep|awk '{print \$2}'`"