如何从终端记录 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