linux:定时执行命令,将stout和sterr都redirect到日志文件并显示在terminal中

我知道如果我想redirect命令的输出和从“时间”到文件我可以这样做:

(time python myscript.py) &> log.txt 

这个tee版本是什么,所以一切都会显示在terminal? 另一个问题是,我怎样才能将标准错误从我的命令python myscript.pyredirect到log.txt

这是另一个选择,使用进程替换(在Bash中):

 { time python myscript.py; } &> >(tee log.txt) 

我可以看到两个好处:语法更接近您的原始命令(因此,可以说更容易记住):只需用进程替换替换文件即可。 另一个好处是你的命令的返回代码将在变量$?可用$? 在命令退出之后,不像在管道中。

注意到你没有在子shell (...)运行你的命令,用{...}命令分组就足够了(介意花括号的空格和尾部的分号)。

这个tee stdout,stderr和time的输出。

 (time python myscript.py) 2>&1 | tee log.txt 

2>&1会将stderr重定向到标准输出,然后再通过管道发送。

tee相当于(在bash

 (time python myscript.py) |& tee log.txt