“exec”正在退出脚本并且不继续下一步

“exec”正在退出脚本并且不继续下一步

我们正在尝试捕获 exec 命令的返回代码,但是一旦执行该命令,脚本就会退出,而不会继续执行下一行。

exec /bin/sh -c $command > log.txt
rc=$?
if [ $rc -ne 0 ]; then echo "script failed"; exit 999 ; fi

任何建议如何使“exec”命令执行,然后使下一组行继续

答案1

exec使用命令作为参数会将进程中运行的当前程序替换为指定命令,因此从调用 shell 脚本的角度来看,它永远不会返回,即使exec无法实际运行所请求的命令。

在您的场景中,您可能应该删除exec

/bin/sh -c " $command" > log.txt
rc=$?
if [ "$rc" -ne 0 ]; then echo>&2 "script failed"; exit 99; fi

另请注意您忘记的引号$command以及前导空格,以避免$command-.并>&2确保错误被​​发送到 stderr。

错误代码从 999 更改为 99,因为任何高于 255 的值都会产生未指定的结果。

如果重点是让$command当前 shell 解释存储的 shell 代码,那么您可以使用eval

eval " $command" > log.txt
rc=$?
if [ "$rc" -ne 0 ]; then echo>&2 "script failed"; exit 99; fi

或更好:

if ! eval " $command" > log.txt; then
  echo>&2 "script failed"
  exit 99
fi

请注意,在 POSIX 中sheval也是所谓的特别的> log.txt当内置函数失败时,例如代码中存在语法错误或重定向失败时,也需要退出。在这些情况下,script failed不会输出错误。这可以通过以下方法解决:

if ! command eval " $command" > log.txt; then
  echo>&2 "script failed"
  exit 99
fi

command前缀删除的地方特殊性到以下特殊内置命令。

zsh如果不在仿真中,则不能使用它sh

相关内容