繁体   English   中英

记录所有 shell 命令执行时的退出代码

[英]Record exit codes of all shell commands as they are executed

我想记录来自特定 TTY 的所有 shell 命令的退出代码,而不需要每个命令的附加语法。

例如:

> source solution.sh # sets up this bash session to monitor exit codes
> ls
> ls f
ls: f: No such file or directory
> echo "hello world"

一些文件将存储退出代码:

0
1
0

这可能吗? 如果没有,我愿意接受其他可能完成类似事情的想法。

我的最终目标是收集关于我所有执行的命令及其退出代码的数据(有点像~/.bash_history附加退出代码)

感谢众多有用的评论,我已经得出以下解决方案来记录 shell 命令执行时的退出代码:

  1. 使用陷阱调试:

     trap 'x=$?; $x >> ~/exit-codes.log' DEBUG
  2. 使用PROMPT_COMMAND

     PROMPT_COMMAND='x=$?; echo $x >> ~/exit-codes.log; (exit $x)'

    请注意, PROMPT_COMMAND必须使用退出代码退出,以便在 shell 命令中保留退出代码历史记录。

  3. 进程记帐是一个更有原则的解决方案,但它需要sudo访问才能启用。

我最终用来记录退出代码命令的solution.sh如下:

trap 'previous_exit_code=$?; previous_command=$this_command; \
  this_command=$BASH_COMMAND; [ ! -z "$previous_command" ] && \ 
  echo \"$previous_command\", $previous_exit_code >> ~/exit-codes.log' DEBUG

最后的退出代码存储在$? 多变的。

但是你必须检查每个发出的命令,所以我猜仍然需要一些胶水来实现你的目标。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM