我正在执行本地脚本,该脚本通过SSH执行第二个脚本:
RES=$(ssh user@destination 'bash -s 2>&1' < remoteScript.sh)
当我检测到错误时,我需要第二个脚本(remoteScript.sh)以代码1退出,这就是为什么我构建了一个在经过精细计算后执行的函数:
ErrorCheck()
{
if [ ! "$?" = "0" ]
then
exit 1
fi
}
不幸的是,当remoteScript.sh继续执行时,退出1表现为返回指令。根据我的测试,这与在远程脚本开头使用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!"
答案 0 :(得分:1)
唯一不会退出的方法是它是否在子shell中运行。
保证exit
退出其shell。
顺便提一下,您可以更简单地编写ErrorCheck
:
ErrorCheck()
{
[ $? = 0 ] || exit 1
}