2014-02-25 118 views
2

我對終端腳本世界非常陌生。這是我想要做的:如何從前一個命令的輸出分配終端變量

1) Find out the process that's using a given port (8000 in this case) 
2) Kill that process 

很簡單。我可以做手工用:

lsof -i tcp:8000 -- get the PID of what's using the port 
kill -9 $PID -- terminate the app using the port 

僅供參考,使用時lsof的-i TCP這裏獲取返回正是:8000

COMMAND PID  USER FD TYPE    DEVICE SIZE/OFF NODE NAME 
php  94735  MyUser 5u IPv6 0x9fbd127eb623aacf  0t0 TCP localhost:irdmi (LISTEN) 

這裏是我的問題:我如何捕獲從PID值lsof -i tcp:8000,以便我可以將該變量用於下一個命令?我知道如何創建我分配的變量......只是不是動態創建的變量。

回答

9

你正在尋找的東西叫command substitution。它可以讓你將命令的輸出視爲shell的輸入。

例如:

$ mydate="$(date)" 
$ echo "${mydate}" 
Mon 24 Feb 2014 22:45:24 MST 

也有可能使用的`backticks`代替美元符號和括號,但大多數shell style guides建議避免這一點。

在你的情況,你可能想要做這樣的事情:

$ PID="$(lsof -i tcp:8000 | grep TCP | awk '{print $2}')" 
$ kill $PID 
+0

工程很好,你已經鏈接到一個很好的資源!謝謝! –

0

東西沿着這些路線應該工作:使用kill命令之前

lsof -i tcp:8000 | grep TCP | read cmd pid restofline 
kill -9 $pid 

,只是呼應它,以確保。

+0

像'(讀CMD PID restofline &&殺-9 $ PID)'可能會更好,讓'$ pid'在轉到下一個命令時,管道子shell中設置的變量不會丟失。 – andrewdotn

相關問題