使用 PROMPT_COMMAND 的最后一个命令的退出状态

使用 PROMPT_COMMAND 的最后一个命令的退出状态

我想保存最后运行命令的退出状态(在文件中,在变量中,这并不重要),但这必须在交互式 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每个命令都会覆盖它。
  • 顺便说一句,我不确定这是否会在脚本中起作用。

相关内容