2017-09-30 167 views
0

我试图输出所有stdoutstderr都控制台和文件。我知道./script | tee somefile,但这对我不起作用。我希望它能够自动完成,而无需通过控制台将其传送出去。我试过了Bash输出所有标准输出到控制台和文件

#!/bin/sh 
exec 2>&1 | tee somefile 
echo "..." 

但是没有奏效。什么是正确的解决方案?

+0

https://stackoverflow.com/questions/418896/如何重定向输出到文件和标准输出 – soft87

+0

@ soft87:我知道。我提到过,我不想从控制台中输入它,就像那篇文章中描述的那样,我希望它始终这样做。所以,即使我运行'./scripts',我也会得到这个文件和控制台输出 – ReeSSult

+0

你想为你运行的* all *命令做这个,或者只是为了一个特定的脚本。如果前者运行'diary'或者在后台读取管道中的三通,并将shell的io流重定向到该管道。如果是后者,只需在剧本中引用。 –

回答

1

经典的解决方案是在脚本的顶部添加这样的事情:

test -z "$REXECED" && { REXECED=1 exec $0 "[email protected]" 2>&1 | tee -a somefile; exit; } 

您也可能会喜欢:

test -t 1 && { exec $0 "[email protected]" 2>&1 | tee -a somefile; exit; } 
+0

第二个更直观,谢谢 – ReeSSult