Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 如何在bash中记录输出,同时在终端中查看输出?_Linux_Bash_Logging_Stdout_Stderr - Fatal编程技术网

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