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

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

我有一个脚本。 它输出诸如echo“指令”之类的东西,以及其他程序输出。 我知道这些命令:

command | tee -a "$log_file" 

 command >> logifle.log 

我要问的是,是否有用于记录的shell参数,或者我可以使用的set命令或类似的东西。 如果我不需要,我不一定要添加数十个重定向或tee到文件。 我仍然希望得到标准输出 – 我只是想要它被记录。:wq

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

有一种非常简单方便的方式:

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

  1. 启动命令script

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

  2. 启动您的脚本或您想要开始的任何内容

  3. 如果脚本已完成,请通过CtrlD停止script

  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没有任何意义,因为script分配shell或启动新shell。

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