gpt4 book ai didi

bash - 从脚本流中捕获退出代码

转载 作者:行者123 更新时间:2023-12-02 14:36:52 27 4
gpt4 key购买 nike

我需要一些正在编写的脚本的帮助。
场景:

  • 脚本 由调度过程执行。该脚本接收传递给它的参数,以某种方式对其进行解析,然后运行脚本 B ,将这些参数提供给它。
  • 脚本 B 执行 sudo -u用户ssh user @ REMOTEMACHINE ,运行一些命令(在远程计算机中),最后运行脚本 C (也在远程计算机中)。我正在使用HERE DOCUMENT传递这些命令。另外,我也将先前的参数传递给此脚本。
  • 此“流”正确运行,并且作业成功完成。

  • 我的问题是:
  • 由于此“流”是由调度过程运行的,因此我需要告诉它作业是否成功完成。我正在通过退出代码执行此操作,因此我想要的是拥有退出代码的,在出现错误的情况下从最后一个脚本返回到第一个脚本。我无法执行此操作,因为退出代码对于单个脚本可以正常工作(我尝试单独执行它们并查找退出代码),但是它们不会发送回父脚本。在我看来,问题在于ssh正在从子脚本获取退出代码,该退出代码实际上已成功结束,因为执行它没有错误:这是其中的命令出错。
  • 当该过程正常运行时,我仍然得到以下内容:
    ssh: Could not resolve hostname : Name or service not known

  • 但是实际上脚本成功完成了。

    希望您能理解我写的内容,最终我可以在此处发布脚本。

    谢谢



    编辑:
    这是脚本。变量名可能存在一些问题,因为我快速重命名了变量名以上传文件。
    由于信誉不佳,我无法上传3个文件,因此将它们合并为一个文件
    SCRIPT FILE

    最佳答案

    我设法解决了这个问题。
    我遵循了olivier的建议,并使用了转义字符使变量由远程计算机扩展。
    我还根据错误发生的位置实施了不同的退出代码。
    最后,在为第二个脚本启动sudo -u之后,我对第一个脚本进行了如下修改:

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

    这样,我就可以退出主脚本,并保持第二个脚本提供的退出代码。
    实际上,我发现问题在于即使在出现错误的情况下,该过程也能正常运行,但是在第二个脚本失败后我给出了更多命令(echo命令已足够),这一事实提供了覆盖该代码的其他退出代码。我想了。

    谢谢大家 !

    关于bash - 从脚本流中捕获退出代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26845655/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com