2010-03-09 32 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; }