我有一些脚本需要查看输出并将结果logging到文件中,最简单的例子是:
$ update-client > my.log
我希望能够在运行时看到命令的输出,但也要将其logging到文件中。 我也loggingstderr
,所以我希望能够在看到它的同时logging错误stream。
update-client 2>&1 | tee my.log
2>&1将标准错误重定向到标准输出,并且将标准输入发送到标准输出和文件。
只要使用尾巴来观看文件更新。 通过在上面的命令之后添加&来完成原始的过程。在执行上面的命令之后,只需使用
$ tail -f my.log
它会不断更新。 (注意它不会告诉你什么时候文件已经运行完毕,所以你可以输出一些东西给日志来告诉你完成了,Ctrl-c退出尾部)
另一种选择是在脚本中使用基于块的输出捕获(不知道这是否是正确的技术术语)。
例
#!/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
没有写入shell的同等性将是:
command > /path/to/logfile
如果你想附加(>>)并在shell中显示输出,使用-a选项:
command | tee -a /path/to/logfile
请注意,管道只会捕捉stdout,到stderr的错误不会被三通管道处理。 如果你想记录错误(从stderr),使用:
command 2>&1 | tee /path/to/logfile
这意味着:运行命令并将stderr流(2)重定向到标准输出(1)。 这将通过三通应用程序传递给管道。
在askubuntu网站了解这一点