Wie mache ich Perl verstehen, navigieren Sie zu einem Verzeichnis mit Leerzeichen im Pfad?
Ich versuche, navigieren Sie zu einem Verzeichnis, in dem ich meine Funktion gespeichert, welche ich in meinem Skript für die Folge-generation. Aber ich bin stecken, weil Perl ist nicht in der Lage zu verstehen, meine syntax für die Funktion Standort (mit Leerzeichen).
Hier ist mein code:
$path ="D:\\AVI MEHENWAL\\PERL\\SCRIPTS\\PROJECTS\\SnmpCheck";
$snmpwalk = `$path\\SnmpWalk.exe -q -t:60 -r:$ip -v:2c -c:$comm -os:1.3.6.1.2.1.1 -op:1.3.6.1.2.1.1.9`;
print "$snmpwalk";
wo SnmpWalk ist meine Funktion befindet sich im Pfad in der variable $path.
Perl gibt folgende Fehlermeldung zur Laufzeit:
D:\AVI MEHENWAL\PERL\SCRIPTS\PROJECTS\SnmpCheck>perl perl_snmpwalk_v2.0.pl
'D:\AVI' is not recognized as an internal or external command,
operable program or batch file.
Wie kann ich dieses problem beheben?
- Es ist
cmd
Sie versuchen, zu verstehen, nichtperl
. Es istcmd
den Fehler zurückzugeben. - Dank ikegami für die Raffination mein problem 🙂
Du musst angemeldet sein, um einen Kommentar abzugeben.
In Perl
q{string}
kann anstelle von verwendet werden'string'
(mnemonische single quote), undqq{string}
statt"string"
(mnemonische Anführungszeichen). Doppelte Anführungszeichen wertet Variablen und umgekehrte Schrägstriche, während einzelne Recht nicht. Auchqx{cmd}
kann verwendet werden, anstelle von backticks in`cmd`
(mnemonische zitieren und ausführen).Mit diesen Konstrukten macht es viel einfacher zu entkommen strings in Situationen wie deiner:
Beachten Sie auch, dass auch unter Windows, Sie kann Schrägstriche verwenden (
/
) in einem Weg. Es funktioniert Prima, solange Sie den vollständigen Pfad für die ausführbare Datei.Mit klugen Verwendung der korrekten Anführungszeichen, das kann aufgeräumt werden, eine Menge. Umgekehrte Schrägstriche innerhalb von einfachen Anführungszeichen brauchen nicht entkommen, es sei denn, Sie sind die letzten Zeichen in der Zeichenfolge, und doppelte Anführungszeichen müssen nur entkommen werden, wenn Sie auch als string-Begrenzer. Es ist auch (fast sicher) falsch zu setzen
$snmpwalk
in Anführungszeichen, wenn Sie es drucken.Unter Linux/OS X, Flucht der Leerraum mit einer
\
. Unter Windows verwenden Sie Anführungszeichen um den Pfad herum.Linux/OS X:
Windows:
Schauen Sie auch hier.
Ist es nicht, Perl ist nicht zu verstehen, Ihr Weg, ist es
cmd
(die Windows-shell). Ich denke, dass durch das hinzufügen einige Zitate, um Ihren Weg dieses Problem zu lösen. Versuchen Sie, die folgenden nicht so elegant hack:'
statt die umgebenden Anführungszeichen, immer Weg dem zu entkommen müssen die backslashes$executable
. Aus diesem Grund, Borodin ' s Antwort ist besser.Ich diese verwendet, um überprüfen Sie den Inhalt der eine .jar-Datei aus Perl läuft auf Cygwin: