问题描述
有没有一种简单的方法可以将 shell 脚本发生的所有活动记录到文件中?
我有一个剧本。它输出诸如 echo “instructions” 之类的内容,以及其他程序输出。我知道这些命令:
command | tee -a "$log_file"
和
command >> logifle.log
我要问的是是否有用于日志记录的 shell 参数,或者我可以使用的 set 命令或类似的东西。如果不需要的话,我不一定想向文件添加数十个重定向或 tee。我仍然想获得标准输出 – 我只是也希望它被记录。:wq
最佳回答
有一个非常简单方便的方法:
使用 script
制作终端会话的打字稿
-
启动命令
script
\n如果给出参数file
,例如script ~/tmp/output
,script
将对话保存在此文件中。如果没有给出文件名,对话将保存在文件typescript
\n -
启动您的脚本或您想要启动的任何内容\n
-
如果脚本完成,请通过
Ctrl
–D
停止script
\n -
检查默认输出文件
typescript
中的输出 \n
要使用 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。
\\n
If the variable SHELL exists, the shell forked by\\xa0script\\xa0will be that shell. If SHELL is not set, the Bourne shell is assumed. (Most shells set this variable automatically).
\\n
次佳回答
如果您通常使用 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 file.log
。