是否有一种简单的方法来记录 shell 脚本执行的所有活动?

是否有一种简单的方法来记录 shell 脚本执行的所有活动?

是否有一种简单的方法可以将 shell 脚本中发生的所有活动记录到文件中?

我有一个脚本。它输出诸如 echo“instructions”之类的内容,以及其他程序输出。我知道命令:

command | tee -a "$log_file"

command >> logifle.log

我问的是是否有用于日志记录的 shell 参数,或者我可以使用 set 命令或类似的东西。如果没有必要,我不一定想向文件添加数十个重定向或 tee。但我仍然希望获得 std 输出 - 我只是希望它被记录下来。:wq

答案1

有一个非常简单且方便的方法:

使用script制作终端会话的打字稿

  1. 启动命令script

    file如果给出了参数,例如script ~/tmp/outputscript将对话保存在此文件中。如果没有给出文件名,对话将保存在文件中typescript

  2. 启动你的脚本或者任何你想启动的东西

  3. 如果你的脚本已完成,请script通过以下方式停止Ctrl-D

  4. 检查默认输出文件中的输出typescript


要使用一步启动命令script,请使用参数-c

-c COMMAND
    Run the COMMAND rather than an interactive 
    shell. This makes it easy for a script to capture
    the output of a program that behaves differently
    when its stdout is not a tty.

script在脚本内部的使用没有意义,因为script会分叉 shell 或启动一个新的 shell。

如果变量 SHELL 存在,则脚本派生的 shell 将是该 shell。如果未设置 SHELL,则假定为 Bourne shell。(大多数 shell 会自动设置此变量)。

答案2

如果您通常使用 运行脚本foo.sh,请尝试使用 运行它(假设它是一个 bash 脚本)bash -x foo.sh。如果您希望将所有内容重定向到文件,请尝试bash -x foo.sh > file.log 2>&1(请注意,我也重定向了 stderr,2>&1如果您不想要这样,请删除 )。如果您还想看看发生了什么,请bash -x foo.sh 2>&1 | tee file.log

相关内容