如何在一个脚本中提取每个命令行、退出代码和 stdout/stderr

如何在一个脚本中提取每个命令行、退出代码和 stdout/stderr

这是我想要实现的目标:

我正在尝试编写一个脚本,对于用户在 Bash 中执行的每个命令,都会将以下内容保存到文件中:

  1. 用户输入的完整命令
  2. 命令的退出代码(AFAIKscript不提供此代码)
  3. 命令生成的 stdout 和 stderr 的内容。

我能够使用以下命令非常快速地实现 1 和 2https://github.com/rcaloras/bash-preexec

我被困在 3 了。

我想创建一个可以放入的脚本~/.bash_profile以方便设置。

提前致谢!

答案1

正如所解释的这里您可以使用exec&>重定向来tee将标准输出和标准错误捕获到文件中。

我想知道的一件事是您是否想要每个命令有不同的捕获(可以从您对“每个命令”的要求和script不能使用的断言来理解)或者您是否只想捕获整个会话一个日志文件。

如果是后者,那么script在会话开始时运行,然后实现您在其中所做的任何其他操作应该可以正常工作,但是上面链接的答案也会有所帮助。如果您确实希望每个命令都有不同的文件,那么您可能希望实现在命令提示符中触发的某些内容 - 可能通过实现$PROMPT_COMMANDman bash了解更多详细信息)并替换每个命令的日志文件。

请注意,当exec &>将标准流捕获到文件中时,它基本上会禁用 TTY 应用程序(在屏幕上绘制)运行(例如lessmc)。这对于任何 shell 级控制台捕获工具都是如此,除非它执行完整的 TTY 模拟(script我相信是这样)。

相关内容