是否有一种简单的方法可以将 shell 脚本中发生的所有活动记录到文件中?
我有一个脚本。它输出诸如 echo“instructions”之类的内容,以及其他程序输出。我知道命令:
command | tee -a "$log_file"
和
command >> logifle.log
我问的是是否有用于日志记录的 shell 参数,或者我可以使用 set 命令或类似的东西。如果没有必要,我不一定想向文件添加数十个重定向或 tee。但我仍然希望获得 std 输出 - 我只是希望它被记录下来。:wq
答案1
有一个非常简单且方便的方法:
使用script
制作终端会话的打字稿
启动命令
script
file
如果给出了参数,例如script ~/tmp/output
,script
将对话保存在此文件中。如果没有给出文件名,对话将保存在文件中typescript
启动你的脚本或者任何你想启动的东西
如果你的脚本已完成,请
script
通过以下方式停止Ctrl-D检查默认输出文件中的输出
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
。