我想保存最后运行命令的退出状态(在文件中,在变量中,这并不重要),但这必须在交互式 shell 中自动完成,手动运行类似的命令var=$?
不是一个选项。
我决定尝试用它PROMPT_COMMAND
来完成这个任务。下面你可以看到我证明我所尝试的方法不起作用。
/home/exit_status$ export PROMPT_COMMAND="echo $?"
0
/home/exit_status$ rm /
rm: cannot remove ‘/’: Is a directory
0
/home/exit_status$ echo $?
1
0
我该如何制作才能使上面的代码片段按我的预期工作?我可以弄清楚如何存储它,我不需要帮助。我刚才提到这一点是为了提供背景信息。
答案1
因为您使用了双引号,$?
所以在分配值时会被扩展 - 您可以使用以下方法进行验证set -x
:
$ PROMPT_COMMAND="echo $?"
+ PROMPT_COMMAND='echo 0'
++ echo 0
0
如果将双引号更改为单引号,您应该得到所需的行为:
$ PROMPT_COMMAND='echo $?'
+ PROMPT_COMMAND='echo $?'
++ echo 0
0
IE
$ set +x
+ set +x
0
$ ls nofile
ls: cannot access 'nofile': No such file or directory
2
答案2
只需将其放在命令后面的 var 中即可。
/home/exit_status$ export PROMPT_COMMAND="echo $?"
0
/home/exit_status$ rm /
rm: cannot remove ‘/’: Is a directory
0
/home/exit_status$ u=$?
0
/home/exit_status$ echo $u
1
0
$u
将保持主机状态直至重置。- 您无法插入
u=$?
,PROMPT_COMMAND
因为$u
每个命令都会覆盖它。 - 顺便说一句,我不确定这是否会在脚本中起作用。