0
我试图输出所有stdout
和stderr
都控制台和文件。我知道./script | tee somefile
,但这对我不起作用。我希望它能够自动完成,而无需通过控制台将其传送出去。我试过了Bash输出所有标准输出到控制台和文件
#!/bin/sh
exec 2>&1 | tee somefile
echo "..."
但是没有奏效。什么是正确的解决方案?
我试图输出所有stdout
和stderr
都控制台和文件。我知道./script | tee somefile
,但这对我不起作用。我希望它能够自动完成,而无需通过控制台将其传送出去。我试过了Bash输出所有标准输出到控制台和文件
#!/bin/sh
exec 2>&1 | tee somefile
echo "..."
但是没有奏效。什么是正确的解决方案?
经典的解决方案是在脚本的顶部添加这样的事情:
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; }
第二个更直观,谢谢 – ReeSSult
https://stackoverflow.com/questions/418896/如何重定向输出到文件和标准输出 – soft87
@ soft87:我知道。我提到过,我不想从控制台中输入它,就像那篇文章中描述的那样,我希望它始终这样做。所以,即使我运行'./scripts',我也会得到这个文件和控制台输出 – ReeSSult
你想为你运行的* all *命令做这个,或者只是为了一个特定的脚本。如果前者运行'diary'或者在后台读取管道中的三通,并将shell的io流重定向到该管道。如果是后者,只需在剧本中引用。 –