我執行本地腳本,它通過SSH執行第二腳本:退出不是內部函數工作在SSH的腳本
RES=$(ssh [email protected] 'bash -s 2>&1' < remoteScript.sh)
我需要第二個腳本(remoteScript.sh)代碼爲1時退出我發現一個錯誤,這就是爲什麼我建造了一些微妙的計算後執行的功能:
ErrorCheck()
{
if [ ! "$?" = "0" ]
then
exit 1
fi
}
不幸的是,1號出口表現爲返回指令,作爲remoteScript.sh繼續執行。根據我的測試,這與在遠程腳本開頭使用sudo su - {user}有關。
我在這裏做錯了什麼?我怎樣才能做到這一點,結束remoteScript.sh?
編輯:
我加入我的遠程腳本非常有限的例子。我試過在本地運行它,它工作。它通過SSH運行時失敗。
sudo su - {user}
DelicateFunction()
{
# The following instruction fails
thisisanerror123
ErrorCheck
}
ErrorCheck()
{
if [ ! "$?" = "0" ]
then
exit 1
fi
}
printf "Executing DelicateFunction\n"
DelicateFunction
printf "I should not print!"
你能告訴你如何調用'ErrorCheck'?我的猜測是你在一個子外殼或者一個管道中執行它,它隱式地創建了一個子外殼。 –
請創建一個演示問題的[mcve]。所寫的功能很好,所以周圍的環境出了問題。我們來看看一個顯示錯誤的自包含示例腳本。 –
不只是不需要,但不能保證工作。 POSIX字符串相等運算符是'='。 – chepner