如何在不抑制终端输出的情况下从终端记录 bash 脚本的输出?

Pav*_*kat 8 command-line bash scripts

如何在不抑制终端输出的情况下从终端记录 bash 脚本的输出$ ./bash-script.sh >> terminal.txt?我想将结果输出记录为文本并将其保存在终端中。

Ser*_*nyy 9

?我想将结果输出记录为文本并将其保存在终端中

你要的是tee命令。它允许将文本回显stdout到文件。例如:

$ ls -l /etc/passwd | tee output_file.txt                                      
-rw-r--r-- 1 root root 2989 6?  17 20:45 /etc/passwd
$ cat output_file.txt                                                          
-rw-r--r-- 1 root root 2989 6?  17 20:45 /etc/passwd
Run Code Online (Sandbox Code Playgroud)

  • 问题的要求在变化,似乎我根据最后的变化调整答案已经晚了。恭喜!:) (2认同)

Anw*_*war 8

您可以使用 tee

例如,

./script.sh | tee logfile
Run Code Online (Sandbox Code Playgroud)

将导致脚本的输出被保存logfile并显示在终端输出中。

如果要存储后续脚本执行的所有输出,则可能需要附加到该文件。在这种情况下,你会tee -a改用

./script.sh | tee -a logfile
./script2.sh | tee -a logfile
Run Code Online (Sandbox Code Playgroud)


Foo*_*ooF 8

tee命令适用于捕获非交互式命令的输出。对于交互式终端应用程序,该软件包bsdutils为您提供script了允许将输出记录到终端的命令,同时允许您像往常一样与应用程序进行交互。两者之间的区别在于script会给应用程序一种在终端下运行的印象,这可能会影响实用程序的行为方式。此外,script无需在 shell 命令行中执行其他重定向即可捕获标准错误。

你可以这样使用它:

$ script -c script.sh output.log
Run Code Online (Sandbox Code Playgroud)

script.sh假设可以在 中找到$PATH)或

$ script -c "script.sh arguments" output.log
Run Code Online (Sandbox Code Playgroud)

不带-c "${command}"选项运行它会运行 shell 并允许将 shell 会话保存到文件中。

作为bsdutils一个“基本”包,它的优先级是“必需的”,你可能已经安装了它。只需尝试发出命令script(然后exit停止录制到默认文件typescript)。

一般来说,我个人通常更喜欢scripttee尽管许多交互式终端应用程序在输出通过管道传输到tee.