在SSH的脚本中退出不在函数内部工作

时间:2015-10-16 16:14:07

标签: linux bash ssh exit

我正在执行本地脚本,该脚本通过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!"

1 个答案:

答案 0 :(得分:1)

唯一不会退出的方法是它是否在子shell中运行。 保证exit退出其shell。

顺便提一下,您可以更简单地编写ErrorCheck

ErrorCheck()
{
    [ $? = 0 ] || exit 1
}