Get return-code und die Ausgabe von Befehl in Perl
Bin ich zu schreiben versucht, ein Dienstprogramm, das gehen durch eine Datei würde wie folgt Aussehen:
# Directory | file name | action | # of days without modification to the file for the command to take action
/work/test/|a*|delete|1
/work/test/|b*|compress|0
/work/test/|c*|compress|1
Mein Skript über das Datei-Entscheidung, wenn, zum Beispiel, gibt es die Dateien unter /work/test/, die beginnen mit "a", die sich nicht geändert haben in den letzten 1 Tagen, und wenn so, es würde Sie zu löschen.
Dafür verwende ich den Befehl "suchen". Beispiel:
my $command = "find " . $values[0] . $values[1] . " -mtime +" . $values[3] . " -delete ;\n";
system ($command);
Aber, ich wurde gebeten, zum abrufen der return code für jeden Schritt, um zu überprüfen, dass jeder Schritt gut geklappt hat.
Nun, ich weiß, dass system() liefert den return-code, und die backticks return die Ausgabe. Aber, wie bekomme ich beides?
- Ich würde File::Find, Datei::Finder, File::Find::Rule, oder ähnlich, statt
find
. Das wird Ihnen erlauben, zu überprüfen, den Erfolg jedes einzelnenunlink
anstatt der Erfolg des gesamtenfind
Befehl.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Nach backticks ausgeführt werden, wird der return code steht in
$?
.system
,readpipe
(backticks),wait
undwaitpid
set$?
.system
zeigt, wie extra die verschiedenen Werte von$?
.Die Universelle Lösung für backticks, system () etc., ist die Verwendung der
${^CHILD_ERROR_NATIVE}
variable. Siehe perldoc perlvar:http://perldoc.perl.org/perlvar.html#%24%7b%5eCHILD_ERROR_NATIVE%7d