我希望Perl只有在STDOUT不相同的情况下才能写入STDERR。例如,如果STDOUT和STDERR都将输出重定向到终端,那么我不想打印STDERR。仅当STDOUT是不同的目的地时,如何才能打印到STDERR?
考虑下面的例子(outerr.pl):
#!/usr/bin/perl
use strict;
use warnings;
print STDOUT "Hello standard output!\n";
print STDERR "Hello standard error\n" if ($someMagicalFlag);
exit 0
现在考虑这个(这是我想达到的目标):
bash $ outerr.pl
Hello standard output!
但是,如果我从重定向到一个文件,我想获得:
bash $ outerr.pl > /dev/null
Hello standard error
和与之相似的另一种方式圆:
bash $ outerr.pl 2> /dev/null
Hello standard output!
如果我再直接既出/犯错到同文件,然后只出应显示:
bash $ outerr.pl > foo.txt 2>&1
bash $ cat foo.txt
Hello standard output!
那么,有没有一种方法来评估/确定是否OUT和ERR和指向相同的“事物”(描述符?)?
'STDERR'和'STDOUT'有它们自己的描述符,即1和2。它们通常也都打印到控制台。 – squiguy 2013-03-14 18:32:13
我怀疑你应该做的是退后一步,重新考虑你想要这个的原因。几乎可以肯定有更好的方法来实现你的真实目标,不管它是什么。 – 2013-03-14 18:59:35
我和Ilmari Karonen在一起。我真的不明白为什么你会担心这一点。它不应该用于复制邮件。 STDOUT和STDERR本质上应该不同。标称消息转到STDOUT,错误或警告消息转到STDERR。也不应该绕圈...永远。 – titanofold 2013-03-14 19:06:45