[英]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.