2012-04-12 4 views
2

Auf einer unserer Windows XP-Maschinen erzeugen Perl Systembefehle wie dir /b eine Fehlermeldung wie: /b: no such file or directory. Mit anderen Worten, der Schalter wird als Dateiname interpretiert.Warum ruft der Perl-Systemaufruf den internen Windows-Befehl nicht auf?

Dies tritt auf, ob ich , open() oder system() verwenden. Ich habe sogar versucht, den Switch als separaten arg to system() zu übergeben. Natürlich habe ich bestätigt, dass der Aufruf in der DOS-Befehlszeile oder im Batch-Skript korrekt funktioniert.

Hat jemand anderes dieses begegnet?

+0

Haben Sie den Perl-Interpreter für Windows auf diesem Computer installiert? Windows führt Perl-Skripts nicht nativ aus. Sorry Grundfrage, aber es scheint seltsam. Wenn du das installiert hast, könntest du bitte versuchen, dem '/' zu entkommen? Schon eine Weile her, seit ich mit Perl unter Windows gearbeitet habe. – Namphibian

+0

Perl entkommt gerade den Sonderzeichen, die Standardverhalten sein sollten, wenn mein Speicher mir richtig dient. – Namphibian

+0

Namphibian, ja, ActivePerl ist auf diesem Rechner installiert und scheint mit anderen Aspekten von Perl zu funktionieren. Ich habe versucht, Perl auf diesem Computer neu zu installieren, um sicherzustellen, dass es mit unseren anderen Computern übereinstimmt (die dieses Problem nicht haben). Übrigens, alle laufen auf demselben Betriebssystem (XP SP3). – UhClem

Antwort

5

Sie haben wahrscheinlich Cygwin installiert und dir.exe ist in Ihrem Pfad, der nicht cmd.exe eingebaut ist, aber ein Alias ​​zu ls.

C:\> which dir 
/usr/bin/dir 

C:\> c:\opt\cygwin\bin\dir.exe --version 
dir (GNU coreutils) 8.15 
Packaged by Cygwin (8.15-1) 
… 

C:\> dir /b 
… 

C:\> perl -e "print `dir /b`" 
dir: cannot access /b: No such file or directory 

C:\> perl -e "print `cmd /c dir /b`" 
…
+0

Sinan, das ist es! Vielen Dank! Wie ich in meinem vorherigen Kommentar angedeutet habe, konnte ich UNIX "riechen"! :) – UhClem

+0

Das Problem ist gelöst (Danke nochmal!), Aber es gibt zwei Dinge, die ich nicht bekomme: 1. Warum würde Perl einen anderen Pfad als DOS sehen? (Oder besser gesagt, warum sollte der Befehl 'System' von Perl den Befehl 'dir' des internen/integrierten DOS umgehen und stattdessen den Pfad verwenden?) 2. Wie ist es, dass Cygwin im DOS-Befehlsfenster präsent ist? Ich habe Cygwin auf meinem eigenen PC installiert, aber ich muss die Bash-Shell speziell starten, um sie zu benutzen. Aber auf diesem speziellen PC kann ich ein normales DOS-Befehlsfenster aufrufen und UNIX-Befehle wie 'ls' und 'which' eingeben. Ich habe ein Gefühl, dass diese beiden Fragen verwandt sind. – UhClem

+0

Sinan, von "DOS" Ich meinte DOS-Befehlsfenster - ein Überbleibsel aus dem Dinosaurierzeitalter. "Windows Command Line Interface" ist wahrscheinlich genauer. Guter Punkt über% PATH%. Ich hatte CYGWIN \ bin im Pfad bemerkt und davon ausgegangen, dass dies Standard bei Cygwin-Installationen war. Aber ich habe meinen eigenen PC überprüft (auf dem auch Cygwin installiert ist), und es gibt kein CYGWIN in% PATH%. – UhClem

1

Ungeprüfte:

dir ist ein Befehlsinterpreter integrierten Befehl. Führen Sie den Befehlsinterpreter stattdessen mit einem Schalter /c oder /k aus, gefolgt von dem Befehl, den Sie ausführen möchten.

+0

Sehr hilfreich. Vielen Dank! – UhClem