Ich versuche, nach einem SVN-Tag Existenz von einem Perl-Skript zu überprüfen. Also versuche ich svn info $url
aufrufen, Exit-Code lesen und Standard-Ausgabe und Standard-Fehler-Streams zu unterdrücken. Aber ich kämpfe, dies zu tun elegant (es gibt wahrscheinlich bessere Möglichkeiten SVN über einen Tag zu fragen, aber das ist nicht der Punkt hier):Wie führe ich ein externes Skript aus, während ich sowohl den Ausgabe- als auch den Exit-Code in Perl aufzeichne?
my $output = `svn info $url/tags/$tag`;
Dadurch wird die Ausgabe unterdrückt, während es in $output
setzen. Exit-Code ist verloren.
my $output = `svn info $url/tags/$tag 2>&1`;
Dies unterdrückt sowohl STDERR und STDOUT und legt sie beide in $output
. Exit-Code ist wieder verloren.
Dies fängt den Exit-Code ab, aber der tatsächliche Ausgabe- und Fehlerstrom ist für den Benutzer sichtbar.
open(STDERR, q{>}, "/dev/null");
open my $fh, q{>}, "/dev/null";
select($fh);
if (system("svn", "info", "$url/tags/$tag") != 0) {
select(STDOUT);
print ("Tag doesn't exist!");
do_something_with_exit();
}
select(STDOUT);
print "Exit code: $exitcode";
Dies tötet die STDOUT- und STDERR und fängt den Exit-Code, aber es ist hässlich, weil ich erinnere müsste die STDOUT- zurück zum Original zu wechseln.
Gibt es also eine elegantere Lösung?
Der Exit-Code der High-Byte in '$ ist?', So dass Sie '$ benötigen? >> 8'. –
@brian: danke für das hinweisend. – bhups
Das war ein kleiner Anstoß für Sie, Ihre Antwort zu bearbeiten. :) –