Ich möchte, dass Perl nur dann an STDERR schreibt, wenn STDOUT nicht dasselbe ist. Wenn beispielsweise STDOUT und STDERR die Ausgabe an das Terminal umleiten, möchte ich nicht, dass STDERR gedruckt wird.Wie drucke ich nur dann auf STDERR, wenn STDOUT ein anderes Ziel ist?
Betrachten Sie das folgende Beispiel (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
Nun ist diese betrachten (das ist, was ich erreichen möchte):
bash $ outerr.pl
Hello standard output!
Wenn ich jedoch auf eine Umleitung aus Datei, würde ich bekommen:
bash $ outerr.pl > /dev/null
Hello standard error
und Similary andersrum:
bash $ outerr.pl 2> /dev/null
Hello standard output!
Wenn ich-direct wieder beide aus/err auf die gleiche Datei, dann sollte nur aus angezeigt werden:
bash $ outerr.pl > foo.txt 2>&1
bash $ cat foo.txt
Hello standard output!
So ist es eine Möglichkeit, zu bewerten/zu bestimmen, ob OUT und ERR und auf dasselbe "Ding" zeigen (Deskriptor?)?
'STDERR' und' STDOUT' haben ihre eigenen Deskriptoren, nämlich 1 und 2. Sie drucken beide im Allgemeinen auch auf die Konsole. – squiguy
Ich vermute, dass was Sie wirklich tun sollten, ist einen Schritt zurück und überdenken Sie die Gründe, warum Sie dies wollen. Es gibt fast sicher einen besseren Weg, um Ihr wahres Ziel zu erreichen, was auch immer es sein mag. –
Ich bin mit Ilmari Karonen. Ich kann nicht wirklich sehen, warum du dir darüber Gedanken machen würdest. Es sollte nicht zum Duplizieren von Nachrichten sein. STDOUT und STDERR sollten von Natur aus anders sein. Nominale Nachrichten werden an STDOUT gesendet und Fehler- oder Warnmeldungen werden an STDERR gesendet. Weder sollte über Runden ... jemals. – titanofold