Bash
一個命令的 Shell 輸出作為其他命令的輸入
我正在嘗試自動化Forever JS 以保持我的開發伺服器執行,為此我需要檢查並停止永遠程序以啟動另一個程序。通過執行
sudo forever list
我得到以下輸出:
資訊:永遠執行的程序 數據:uid 命令腳本永遠**pid** id 日誌文件正常執行時間 數據:[0] 0NQH /usr/bin/nodejs app.js 17047 **17049** /home/ubuntu/.forever/0NQH.log 0:2:4:58.594
從上面的輸出中,我需要目前為17049的****pid並將其提供給下一個命令,如下所示:
sudo forever stop {{pidfromabove}}
為了做到這一點,在我的腳本中我嘗試了很多東西,主要是試圖找到app.js和**/home**之間的兩個字元串,但由於某種原因它一直列印整行。我嘗試了 sed 和 awk 的不同組合。如何從上面獲取 pid 以提供給下一個
stop
命令?
這看起來像是
awk
. 如果您確定輸出格式穩定,因此您感興趣的 PID 始終是該行的第 7 個元素,這將列印 PIDapp.js
:sudo forever list | awk '/app\.js/ { print $7 }'
您遇到的問題可能是因為輸出在 stderr 上,而不是在 stdout 上。如果是這種情況,您可以嘗試:
sudo forever list 2>&1 | sed 's/.*app.js [0-9]* \([0-9]*\) /\1/'
它應該只回答第二個 pid。
然後你可以這樣做:
sudo forever stop `sudo forever list 2>&1 | sed 's/.*app.js [0-9]* \([0-9]*\) /\1/'`