我有一个命令可以杀死一些进程,如下所示:
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
给出了上述错误。
谁能告诉我可能是什么问题?
答案 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}'`"