我有一些脚本,我需要看到的输出和结果记录到文件中,用最简单的例子是:如何在bash中记录输出并同时在终端中看到它?
$ update-client > my.log
我希望能够看到该命令的输出,而这是运行,但也有它记录到文件。我也登录stderr
,所以我希望能够在看到它的同时记录错误流。
我有一些脚本,我需要看到的输出和结果记录到文件中,用最简单的例子是:如何在bash中记录输出并同时在终端中看到它?
$ update-client > my.log
我希望能够看到该命令的输出,而这是运行,但也有它记录到文件。我也登录stderr
,所以我希望能够在看到它的同时记录错误流。
update-client 2>&1 | tee my.log
2> & 1标准误差重定向到标准输出,和T发送其标准输入到标准输出和文件。
只需使用尾部即可在文件更新时观察文件。背景你在你上面的命令后,加入&执行该命令后,以上只是用
$ tail -f my.log
它会不断地更新原来的进程。 (注意它不会告诉你什么时候文件已经完成运行,所以你可以输出一些东西到日志中来告诉你它已经完成了,Ctrl-c退出尾部)
哇在这一个艰难的人群。这个答案究竟有什么错误? – Cfreak 2010-07-09 19:19:52
在我看来,它比使用'tee'差几千倍。 – 2010-07-09 21:16:55
需要我在后台运行进程 – 2012-08-19 19:10:44
另一个选择是使用基于块的输出捕捉脚本(不知道这是否是正确的技术术语)。
例
#!/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"
我想有更多的控制和灵活性 - 所以我更喜欢这种方式。
谢谢,这工作完美 – wiak 2015-06-02 19:25:45
可以使用tee命令为:
command | tee /path/to/logfile
的equivelent没有写入壳将是:
command > /path/to/logfile
如果要追加(>>)和显示输出在shell中,使用-a选项:
command | tee -a /path/to/logfile
请注意管道只会捕捉stdout,错误为std err没有被三通管处理。如果你想记录错误(从标准错误),用途:
command 2>&1 | tee /path/to/logfile
这意味着:运行命令和重定向stderr流(2)到stdout(1)。这将通过三通应用程序传递给管道。
了解这个在askubuntu网站
您还可以追加日志文件,按此处的说明,以及做其他的东西与三通:http://linux.101hacks.com/unix/tee-command-例子/ – thegeek 2010-07-12 08:18:09