【问题标题】:Capturing the exit code of sourced shell script without breaking the current script在不破坏当前脚本的情况下捕获源 shell 脚本的退出代码
【发布时间】:2020-01-30 21:37:52
【问题描述】:

我有两个 shell 脚本:

test.sh

function func() {
echo $1
exit 1
}

运行.sh

source ./test.sh

func "Hello"
exitCode=$?
echo "Output: ${exitCode}"

结果:

Hello

我目前面临的问题是,当函数 func 返回 1 时,我的 run.sh 脚本会中断,之后不会执行任何操作。那么,有什么方法可以在不破坏 run.sh 的情况下有效地捕获退出代码。由于我无法修改 test.sh 脚本,我必须在我的 run.sh 中找到一种方法。我尝试使用flock 执行脚本,但无法正常工作。

【问题讨论】:

  • 如果您可以控制该代码,您应该在函数中使用return 而不是exit
  • 我没有更改该脚本的权限,因此我正在寻找在我的脚本中执行此操作的选项。
  • 哦,您实际上在问题文本中这么说。我的错。

标签: bash shell sh


【解决方案1】:

如果您不需要环境更改,您可以在子shell 中运行该函数。这使得 exit 仅适用于 ( .. ) 而不是您的主脚本:

source ./test.sh

( func "Hello" )
exitCode=$?
echo "Output: ${exitCode}"

【讨论】:

  • 谢谢,确实有效,但有没有办法我可以使用flock来确保代码在不调用子shell的情况下运行
  • 在没有子shell 的情况下,有很多技巧可以做到这一点,例如alias exit=return,但不,你不能用flock 做到这一点。该问题与文件锁定无关。
猜你喜欢
  • 2020-05-16
  • 2013-01-26
  • 2013-08-28
  • 2010-11-27
  • 1970-01-01
  • 1970-01-01
  • 2016-07-30
  • 2012-05-16
  • 2014-10-21
相关资源
最近更新 更多