2016-11-21 23 views
0

我已經保存在.SH文件shell腳本使輸出2線我只需要1

prog=$1 
ps axf | grep $prog | grep -v grep | awk '{print "kill -9 " $1}' 

我得到以下輸出下面的命令,當我執行它

kill -9 3184 
kill -9 20359 

但我只需要它的第一行,因爲這是唯一有效的PID。我怎樣才能從輸出中刪除第二行。

+5

最好使用'pkill'。不要重新發明輪子! –

+0

'ps axf |的o/p是多少? grep $ prog | grep -v grep'? –

+4

'grep'後跟'awk'是反模式。你應該使用'awk'!/ grep/{...}'來處理所有沒有字符串「grep」的行。管道和叉子是昂貴的操作。 – Jens

回答

2

有你想要做什麼的幾個問題:

  • 你正在構建4個命令鏈的東西比較簡單
  • 你會得到的結果只有第一包含$prog的進程列表(不包括您濾除的grep $prog);你怎麼能確定這是你想要的過程?

正確的命令來使用是

pkill $prog` 

如評論,這可能會做你想做的建議。

只是爲了信息,並回答你的問題,你可以通過管道輸出到head -n 1只返回第一行:

<list of commands> | head -n 1 

然而,在你的情況下,這將增加第五命令鏈,所以我建議你不要這樣做。

+0

pkill工作。謝謝 – Imdad