Es gibt einige Probleme in Ihrem Skript:
Wenn Sie
hinzugefügt hatte an Ihr Skript würde es Sie haben die folgenden Fehler gezeigt mit Ihrem ersten Versuch:
Useless use of numeric gt (>) in void context at ./foo line 9.
Bareword "logfile" not allowed while "strict subs" in use at ./foo line 9.
Bareword "txt" not allowed while "strict subs" in use at ./foo line 9.
Execution of ./foo aborted due to compilation errors.
- Sie benötigen die
$cmd
und die Log-Datei den Namen in eine Zeichenfolge zu verbinden und diese Zeichenfolge als Parameter an system()
geben.
- Sie müssen den Backslashes entkommen, weil z.
\f
bedeutet Form Feed und \l
bedeutet Kleinbuchstaben nächsten Zeichen.
- Wenn Sie Fehlermeldungen umleiten möchten, möchten Sie normalerweise STDOUT und STDERR in eine Datei umleiten.
Fassen wir zusammen:
use strict;
use warnings;
my $logfile = "\\path_to\\logdir\\file.log";
my $rc = system("$cmd > $logfile 2>&1");
if (!$rc) {
warn "something went wrong\n";
}
Diese Umleitungen Fehler- und Standardausgaben in derselben Datei.
Meine Antwort bezieht sich auf this revision der Frage. In der Zwischenzeit hat jemand das Q bearbeitet, doppelte Backslashes \\
hinzugefügt und somit das dritte Geschoss ungültig gemacht.
Das gleiche Ergebnis. Das Programm stirbt – nelli
Was ist das $ cmd? – crustycollins
Programmname und Argumente – nelli