2010-03-09 75 views
3

我有一个命令来杀死如下一些方法:Unix的alias命令无法正常运行

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 

给出了上述错误。

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

+2

为什么接近投票? – Vijay 2010-03-09 12:00:28

+1

@benjamin他们投票将它移到超级用户 - 我个人不同意,因为它显然是一个shell脚本问题。 – Pointy 2010-03-09 12:06:48

+1

可能是因为它不是编程相关 - 它更适合于serverfault.com(系统管理员)。 – 2010-03-09 12:06:51

回答

5

命令行,让你正在设置别名未正确引用。具体而言,反引号嵌入式子命令在设置别名时执行,而不是在以后实际要运行别名时执行。

尝试这种方式设置它:

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

编辑:我固定围绕awk命令引号 - 这是棘手当你已经单引号中嵌入单引号。

+0

很好的答案。这完美的作品:) – Vijay 2010-03-09 12:13:36

+0

为什么''''是必需的? – Vijay 2010-03-09 12:15:04

-1

尝试逃脱在awk中的$,它通常必须进行转义,使其很好地工作:

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

不,这不会帮助我不认为。 – Pointy 2010-03-09 12:05:58

+0

这不起作用:( – Vijay 2010-03-09 12:11:14

0

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

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

psu这里是'ps-fu $ USER'.its又一个别名。 – Vijay 2010-03-09 12:26:27

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; }