我想知道如何将stderr重定向到多个输出。 我尝试了这个脚本,但我无法使其正常工作。 第一个文件应该同时具有stdout和stderr,而第二个文件则只应具有错误。
perl script.pl &> errorTestnormal.out &2> errorTest.out
有更好的方法吗?非常感谢您的帮助。谢谢。
我想知道如何将stderr重定向到多个输出。 我尝试了这个脚本,但我无法使其正常工作。 第一个文件应该同时具有stdout和stderr,而第二个文件则只应具有错误。
perl script.pl &> errorTestnormal.out &2> errorTest.out
有更好的方法吗?非常感谢您的帮助。谢谢。
perl script.pl 2>&1 >errorTestnormal.out | tee -a errorTestnormal.out > errorTest.out
这段代码有点混乱,让我们逐步来看。
STDERR
的信息现在会输出到STDOUT
STDOUT
的信息现在会输出到errorTestnormal.out
现在,STDOUT
会被打印到一个文件中,而STDERR
会被打印到STDOUT
中。我们想把STDERR
放入两个不同的文件中,可以使用tee命令。tee将它接收到的文本附加到一个文件中,并同时输出到STDOUT
。
tee
将STDOUT
输出内容附加到errorTestnormal.out
文件中,所以现在该文件中包含了script.pl
的所有STDOUT
和STDERR
输出。tee
的STDOUT
(即包含script.pl
的STDERR
)写入到errorTest.out
文件中。执行完毕后,errorTestnormal.out
文件包含所有的STDOUT
输出,然后是所有的STDERR
输出。而errorTest.out
文件只包含STDERR
输出。
我也曾经在这方面耗费了一些时间。为了将stderr输出到两个文件中,同时只将stdout输出到一个文件中(例如将stderr输出到errors.log和output.log,然后将stdout只输出到output.log),并且按照发生的顺序排序,下面的命令更好:
((sh test.sh 2>&1 1>&3 | tee errors.log) 3>&1 | tee output.log) > /dev/null 2>&1
我猜在第二个">"的情况下,您尝试将errorTestnormal.out
(而不是script.pl
)的错误输出发送到errorTest.out
。