从脚本流中捕获退出代码

时间:2014-11-10 14:06:56

标签: bash ssh


我需要帮助处理一些我写的脚本 情形:

  • 脚本 A 由调度进程执行。这个脚本接受传递给它的参数,以某种方式解析它们并运行脚本 B 用这些参数提供它;
  • 脚本 B 执行 sudo -u用户ssh用户@ REMOTEMACHINE ,运行一些命令(在远程计算机中),最后运行脚本 C (也在远程机器中)。我正在使用 HERE DOCUMENT 传递这些命令。另外,我也将以前的参数传递给了这个脚本。
  • 这个"流程"正确运行并且作业成功完成。

我的问题是:

  • 由于这个"流程"由调度过程运行,我需要告诉它作业是否成功完成。我通过退出代码执行此操作,因此我想要的是有一个的退出代码,如果出现错误,则从最后一个脚本返回到第一个脚本。我无法执行此操作,因为退出代码可以正常运行单个脚本(我尝试单独执行它们并查找退出代码),但它们不会被发送回父脚本。在我看来,问题是ssh从子脚本获取退出代码,实际上已成功结束,因为执行它没有错误:它内部的命令出错了。
  • 虽然这个过程正常,但我仍然得到这一行:

    ssh: Could not resolve hostname : Name or service not known

但实际上脚本已成功完成。

我希望你理解我写的内容,我最终可以在这里发布我的脚本。

由于

0


编辑:
这是脚本。变量名称可能存在一些问题,因为我将其重命名为上传文件 由于我的声誉很低,我无法上传3个文件,因此我将它们合并到一个文件中 SCRIPT FILE

1 个答案:

答案 0 :(得分:1)

我设法解决了这个问题 我遵循了olivier的建议并使用了escape char来使变量由远程机器扩展。
我还根据错误发生的位置实现了不同的退出代码 最后,在为第二个脚本启动sudo -u之后,我修改了第一个脚本:

EXITCODEOFTHESECONDSCRIPT=$?    
if [ $EXITCODEOFTHESECONDSCRIPT = 0 ]
    then
        echo ""
        echo "Export job took $SECONDS seconds."
        echo ""
        exit 0
else
    exit $EXITCODEOFTHESECONDSCRIPT
fi  

这样我就可以退出主脚本MAINTAINING第二个脚本提供的退出代码。 事实上,我发现问题是这个过程运行良好,即使出现错误,但事实是我在第二个脚本失败后发出更多命令(echo命令已经足够),提供了其他退出代码我想要。

感谢所有人!