Comment puis-je faire Perl comprendre pour accéder à un répertoire avec des espaces dans le chemin d'accès?
Je suis en train d'accéder à un répertoire où j'ai ma fonction stockée lequel j'utilise dans mon script pour la suite génération. Mais je suis coincé parce que Perl n'est pas en mesure de comprendre la syntaxe de la fonction de localisation (avec des espaces).
Voici mon 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";
où SnmpWalk est ma fonction situé au chemin dans la variable $path.
Perl retours d'erreur suivant lors de l'exécution:
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.
Comment puis-je résoudre ce problème?
- C'est
cmd
que vous essayez de faire comprendre, de ne pasperl
. C'estcmd
retour de l'erreur. - Grâce ikegami pour affiner mon problème 🙂
Vous devez vous connecter pour publier un commentaire.
En Perl,
q{string}
peut être utilisé à la place de'string'
(mnémonique apostrophe), etqq{string}
au lieu de"string"
(mnémonique devis double). Devis Double évalue les variables et les barres obliques inverses, tout seul tout à fait ne pas. Aussi,qx{cmd}
peut être utilisé à la place de backticks dans`cmd`
(mnémonique devis et exécuter).À l'aide de ces constructions, il est beaucoup plus facile d'échapper à cordes dans des situations comme la vôtre:
Notez aussi que même sous Windows, vous peut utiliser des barres obliques (
/
) dans un chemin. Il fonctionne très bien aussi longtemps que vous utilisez le chemin d'accès complet pour le fichier exécutable.Avec une utilisation judicieuse de la bonne guillemets, ce qui peut être rangé beaucoup. Les barres obliques inverses dans des guillemets simples n'ont pas besoin de s'échapper, à moins qu'ils sont le dernier caractère de la chaîne, et les guillemets ne doivent être échappé si ils sont également utilisés comme délimiteurs de chaînes de caractères. C'est aussi (presque certainement) de mal à mettre
$snmpwalk
entre guillemets lors de l'impression.Sur Linux/OS X, à s'échapper de l'espace avec un
\
. Sur Windows, utiliser des guillemets autour du chemin.Linux/OS X:
Windows:
Aussi regarder ici.
Il n'est pas Perl qui n'est pas de comprendre votre chemin, il est
cmd
(le shell de Windows). Je pense qu'en ajoutant des guillemets autour de votre chemin d'accès permettra de résoudre cette question. Essayez la procédure suivante pas tellement élégant hack:'
au lieu de les entourant de guillemets, s'éloigner le besoin d'échapper les barres obliques inverses$executable
. Pour cette raison, de Borodine réponse est mieux.J'ai utilisé ce pour examiner le contenu d'un .le fichier jar de l'intérieur Perl en cours d'exécution sur Cygwin: