linux - 退出在 SSH 脚本的内部函数中不起作用

标签 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 继续执行,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/

相关文章:

c - 轮询返回 POLLIN 和 POLLERR 后的 Read()

linux - 从 Bash 中的日期减去天数

macos - PS1 中的什么导致我的 Terminal.app 命令卡在屏幕上?

linux - Bash:如何干净地记录 ssh/bash 输出的处理行?

ubuntu - Amazon EC2 RSA key 停止身份验证 - 权限被拒绝(公钥)

linux - linux内核如何知道哪个inotify_handle有某个watch

linux - 对于 jailed Linux 用户,forkpty 失败

linux - 如何创建需要输入root密码才能获得root访问级别的用户

linux - udev $kernel 或 %k 替换没有正确扩展

ssh - 向 vagrant 添加自定义 ssh key