Linux 如何在bash中记录输出,同时在终端中查看输出?
我有一些脚本,需要查看输出并将结果记录到文件中,最简单的示例是:Linux 如何在bash中记录输出,同时在终端中查看输出?,linux,bash,logging,stdout,stderr,Linux,Bash,Logging,Stdout,Stderr,我有一些脚本,需要查看输出并将结果记录到文件中,最简单的示例是: $ update-client > my.log 我希望能够在命令运行时看到命令的输出,但也希望将其记录到文件中。我还记录了stderr,所以我希望能够在看到错误流的同时记录错误流 update-client 2>&1 | tee my.log 2> &1将标准错误重定向到标准输出,tee将其标准输入发送到标准输出和文件。只需使用tail即可在文件更新时查看文件。在您执行上述命令后,在您的上述命令之后添加&
$ update-client > my.log
我希望能够在命令运行时看到命令的输出,但也希望将其记录到文件中。我还记录了stderr,所以我希望能够在看到错误流的同时记录错误流
update-client 2>&1 | tee my.log
2> &1将标准错误重定向到标准输出,tee将其标准输入发送到标准输出和文件。只需使用tail即可在文件更新时查看文件。在您执行上述命令后,在您的上述命令之后添加&作为原始流程的背景,只需使用
$ tail -f my.log
它将不断更新。(请注意,它不会告诉您文件何时完成运行,因此您可以向日志输出一些内容来告诉您文件已完成。Ctrl-c退出tail)另一个选项是在脚本中使用基于块的输出捕获(不确定这是否是正确的技术术语) 范例
#!/bin/bash
{
echo "I will be sent to screen and file"
ls ~
} 2>&1 | tee -a /tmp/logfile.log
echo "I will be sent to just terminal"
我喜欢有更多的控制和灵活性,所以我更喜欢这种方式 您可以使用tee命令:
command | tee /path/to/logfile
未向外壳写入的等效项为:
command > /path/to/logfile
如果要追加(>>)并在shell中显示输出,请使用-a选项:
command | tee -a /path/to/logfile
请注意,管道将仅捕获标准输出,带T形三通的管道不会处理标准输出的错误。如果要记录错误(从stderr),请使用:
这意味着:运行命令并将stderr流(2)重定向到stdout(1)。将通过T形三通应用程序传递到管道
在askubuntu网站上了解这一点哇,这一次的观众太多了。这个答案到底出了什么问题?在我看来,它比使用
tee
糟糕数千倍。要求我在后台运行这个过程。我从来不知道这个很棒的技巧!我不认为这是我来这里时真正想要的答案,但对该命令及其使用的了解是有用的+1您还可以附加日志文件,如本文所述,并对tee执行其他操作:我们可以告诉tee忽略清除
和其他控制字符吗?使用这些答案中的任何一个都非常有效,除非您执行cat/path/to/logfile
操作,否则会复制清除命令。
command 2>&1 | tee /path/to/logfile