我正在做一个糟糕的项目。它在后台使用了很多混乱的 shell 脚本。脚本可能包含一些其他脚本。许多错误输出被重定向到 /dev/null。当脚本未成功执行时,我可以用来echo $?
查看错误代码,但我不知道哪个命令返回了此错误代码。
这些脚本就在那里。我不想检查所有代码并添加额外的代码以温和的方式处理错误。现在我有两个问题:
- 是否可以打印最后一个未成功执行的带有参数的 bash 命令?
- 如此混乱的 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
类似这样。希望这能有所帮助。