当前位置: 首页>>技术教程>>正文


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

, , ,

问题描述

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

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

command | tee -a "$log_file"

command >> logifle.log

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

最佳回答

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

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

  1. 启动命令script \n如果给出参数file,例如script ~/tmp/outputscript将对话保存在此文件中。如果没有给出文件名,对话将保存在文件 typescript \n

  2. 启动您的脚本或您想要启动的任何内容\n

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

  4. 检查默认输出文件 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

参考资料

本文由Ubuntu问答整理, 博文地址: https://ubuntuqa.com/article/13919.html,未经允许,请勿转载。