如何获取最后的 bash 错误

如何获取最后的 bash 错误

我正在做一个糟糕的项目。它在后台使用了很多混乱的 shell 脚本。脚本可能包含一些其他脚本。许多错误输出被重定向到 /dev/null。当脚本未成功执行时,我可以用来echo $?查看错误代码,但我不知道哪个命令返回了此错误代码。

这些脚本就在那里。我不想检查所有代码并添加额外的代码以温和的方式处理错误。现在我有两个问题:

  1. 是否可以打印最后一个未成功执行的带有参数的 bash 命令?
  2. 如此混乱的 shell 脚本代码该如何生存呢?

答案1

尝试

bash -x /my/script

在执行脚本时打印其每一行。

不能这样运行脚本吗?您也可以将其添加到文件第一行的 shebang 中。

#!/usr/bin/bash -x

答案2

正如 Michael 所说,而且我也经常在 bash 脚本的错误检查中使用 $LINENO - 每次引用此参数时,shell 都会用一个十进制数替换脚本中表示当前连续行号(从 1 开始)的十进制数。

因此,在执行某些命令后我会执行:

 if [ $? = 0 ]; then
    echo "Command "Foo" finished successfully."
 else 
    echo "Error occurred on line $LINENO in command "Foo" with exit status  $?"
 fi

类似这样。希望这能有所帮助。

相关内容