Pav*_*kat 8 command-line bash scripts
如何在不抑制终端输出的情况下从终端记录 bash 脚本的输出$ ./bash-script.sh >> terminal.txt?我想将结果输出记录为文本并将其保存在终端中。
?我想将结果输出记录为文本并将其保存在终端中
你要的是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)
您可以使用 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)
该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)。
一般来说,我个人通常更喜欢script ,tee尽管许多交互式终端应用程序在输出通过管道传输到tee.