我希望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