我知道如果我想redirect命令的输出和从“时间”到文件我可以这样做:
(time python myscript.py) &> log.txt
这个tee
版本是什么,所以一切都会显示在terminal? 另一个问题是,我怎样才能将标准错误从我的命令python myscript.py
redirect到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