我正在檢查遠程服務器上的進程是否已被殺死。我正在使用的代碼是:Bash - 命令的輸出似乎是一個整數,但「[」抱怨
if [ `ssh -t -t -i id_dsa [email protected] "ps -auxwww |grep pipeline| wc -l" | sed -e 's/^[ \t]*//'` -lt 3 ]
then
echo "PIPELINE STOPPED SUCCESSFULLY"
exit 0
else
echo "PIPELINE WAS NOT STOPPED SUCCESSFULLY"
exit 1
fi
然而,當我執行此我得到:
: integer expression expected
PIPELINE WAS NOT STOPPED SUCCESSFULLY
1
返回的實際值是「1」,無空白。我通過以下方式檢查了:
vim <(ssh -t -t -i id_dsa [email protected] "ps -auxwww |grep pipeline| wc -l" | sed -e 's/^[ \t]*//')
然後是僅顯示整數和換行符的「:set list」作爲返回值。
我不知道爲什麼這不起作用。
而不是'grep pipeline | wc -l'嘗試使用'grep -c pipeline' – anubhava
當我運行該命令時,在數字末尾看到一個'\ r \ n',這可能會導致比較失敗。爲了快速「修復」它,我通過另一個「sed」管道在第一個之後:'... | sed -e's/\ r * $ //''。然後它沒有錯誤地工作。我不確定'\ r'中有什麼東西在折騰。因此,您的整個'ssh'行如下所示:'ssh -t -t -i id_dsa [email protected]「ps -auxwww | grep pipeline | wc -l」| sed -e's/^ [\ t] * //'| sed -e's \\ r * $ //'' – lurker
它增加了額外的\ r,所以你是sed命令的工作。謝謝,我會投你的答案,但你沒有發佈它作爲答案。 –