Eim*_*tas 10 shell scripting bash environment-variables
该$?
变量保存上次运行命令的退出状态。是否有一个变量可以保存上次运行命令本身?
如果最后一个命令在没有参数的情况下执行,它将保存在$_
变量中。这通常包含上一个命令的最后一个参数- 所以如果没有参数,则值$_
是最后一个命令本身。
另一种选择是了解上一个后台命令的详细信息。正如 l0b0 所写,$!
保存它的 PID - 这样你就可以解析输出ps $!
(可能有额外的格式化选项ps
)。
该DEBUG
陷阱允许您在执行任何简单命令之前执行命令。变量中提供了要执行的命令的字符串版本(单词之间用空格分隔)BASH_COMMAND
。
trap \'previous_command=$this_command; this_command=$BASH_COMMAND\' DEBUG\n\xe2\x80\xa6\necho "last command is $previous_command"\n
Run Code Online (Sandbox Code Playgroud)\n\n请注意,previous_command
每次运行命令时都会发生变化,因此将其保存到变量中以便使用它。如果您还想知道上一个命令的返回状态,请将两者保存在一个命令中。
cmd=$previous_command ret=$?\nif [ $ret -ne 0 ]; then echo "$cmd failed with error code $ret"; fi\n
Run Code Online (Sandbox Code Playgroud)\n\n如果您只想在失败的命令时中止,请使用set -e
使脚本在第一个失败的命令时退出。EXIT
您可以显示陷阱中的最后一条命令。
set -e\ntrap \'echo "exit $? due to $previous_command"\' EXIT\n
Run Code Online (Sandbox Code Playgroud)\n\n可能适用于某些用途的另一种方法是set -x
打印脚本执行的跟踪并检查跟踪的最后几行。