如何从终端记录 bash 脚本的输出而不抑制终端输出?

如何从终端记录 bash 脚本的输出而不抑制终端输出?

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

答案1

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

你想要的是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

答案2

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

你可以像这样使用它:

$ script -c script.sh output.log

(其中script.sh假设在中找到$PATH)或

$ script -c "script.sh arguments" output.log

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

由于它bsdutils是“必需”包,并且其优先级为“必需”,因此您可能已经安装了它。只需尝试发出命令script(然后exit停止录制到默认文件typescript)。

总的来说,我个人通常script 更喜欢,tee尽管许多交互式终端应用程序在输出通过管道传输到时似乎运行良好tee

答案3

您可以使用tee

例如,

./script.sh | tee logfile

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

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

./script.sh | tee -a logfile
./script2.sh | tee -a logfile

相关内容