簡體   English   中英

上一個命令執行的退出代碼始終為0 - 在遠程Shell執行$?

[英]Exit code of previous command execution is always 0 — In Remote Shell Execution $?

我正在嘗試執行一個腳本,在腳本的中途,它在遠程shell中執行一部分代碼,然后再次返回到同一個本地shell。

但是,我的問題是關於在遠程shell中執行的命令的退出代碼。 我試圖根據退出代碼在if-then-else遠程做出決定。 當它沒有按預期執行時,我試圖縮小問題的范圍。

以下是我的發現,

輸出始終是IP Found,因為$? 總是等於0。

ssh root@<remote server> bash -c "'
host www.google.com123
if [ $? != 0 ]
then
    echo "Invalid Host"
else
    echo "IP Found"
fi

'"

此外,在這種情況下,預期相同的輸出

ssh root@<remote server> bash -c "'
host www.google.com
if [ $? != 0 ]
then
    echo "Invalid Host"
else
    echo "IP Found"
fi

'"

參考:我從這里開始了解這種遠程執行方法

請幫助我理解遠程shell執行的這種行為。 另外,如果有任何其他方法通過ssh執行遠程shell腳本的一部分,請建議。

最外面的引號是雙引號,所以$? 在遠程運行bash之前在本地擴展。 相反,使用

ssh root@<remote server> 'bash -c "
host www.google.com123
if [ \$? != 0 ]
then
    echo \"Invalid Host\"
else
    echo \"IP Found\"
fi

"'

更簡單的是避免檢查$? 明確地說:

ssh root@<remote server> 'bash -c "
if ! host www.google.com123
then
    echo \"Invalid Host\"
else
    echo \"IP Found\"
fi

"'

更簡單的是不運行第二個不必要的shell。

ssh root@<remote server> '
if ! host www.google.com123
then
    echo "Invalid Host"
else
    echo "IP Found"
fi
'

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM