我正在执行一个本地脚本,它通过 SSH 执行第二个脚本:
RES=$(ssh user@destination 'bash -s 2>&1' < remoteScript.sh)
当我检测到错误时,我需要第二个脚本 (remoteScript.sh) 以代码 1 退出,这就是为什么我构建了一个在经过一些精细计算后执行的函数:
ErrorCheck()
{
if [ ! "$?" = "0" ]
then
exit 1
fi
}
不幸的是,随着 remoteScript.sh 继续执行,exit 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!"
最佳答案
唯一不会退出的方法是它在子 shell 中运行。
exit
保证退出它的 shell。
顺便说一下,你可以把 ErrorCheck
写得更简单:
ErrorCheck()
{
[ $? = 0 ] || exit 1
}
关于linux - 退出在 SSH 脚本的内部函数中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33175057/