2012-04-12 4 views
2

Windows XPマシンの1つで、dir /bなどのPerlシステムコマンドは、/b: no such file or directoryのようなエラーメッセージを生成します。つまり、スイッチはファイル名として解釈されています。Perlシステムコールが内部Windowsコマンドを呼び出せないのはなぜですか?

これは、私がbackticks,open()またはsystem()を使用した場合に発生します。私は別の引数としてsystem()にスイッチを渡そうとしました。もちろん、DOSコマンドラインまたはバッチスクリプトで呼び出しが正しく動作することを確認しました。

誰かがこれに遭遇しましたか?

+0

このマシンにWindows用のPerlインタプリタをインストールしましたか? WindowsはPerlスクリプトをネイティブに実行しません。申し訳ありませんが、基本的な質問が奇妙に思えます。あなたがこれをインストールしていれば、「/」をエスケープしてみてください。 WindowsのPerlで作業して以来、しばらくしていました。 – Namphibian

+0

私のメモリが正しく機能している場合、Perlは標準的な動作であるはずの特殊文字をエスケープしています。 – Namphibian

+0

Namphibian、はい、ActivePerlがこのマシンにインストールされており、Perlの他の面でうまく動作しているようです。私はこのコンピュータにPerlを再インストールしてみましたが、これは他のコンピュータ(この問題がない)と一致していることを確認しています。 BTWは、すべて同じOS(XP SP3)で動作しています。 – UhClem

答えて

5

おそらくCygwinはインストールされているとdir.exelscmd.exeビルトインが、別名ではありません、あなたのパスにあります。

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

シナン、これです!ありがとうございました!以前のコメントで暗示したように、私はUNIXの "臭い"を感じることができました! :) – UhClem

+0

問題は解決されました(もう一度ありがとう!)が、私には得られない2つのことがあります: 1.なぜPerlはDOSとは違うパスを見ていますか? (あるいは、なぜ、Perlのシステムコマンドが内部/組み込みDOSのdirコマンドをバイパスし、パスを代わりに使うのはなぜですか?) 2. CygwinはどのようにDOSコマンドウィンドウに存在していますか?自分のPCにCygwinをインストールしましたが、それを使用するためにbashシェルを起動する必要があります。しかし、この特定のPCでは、通常のDOSコマンドウィンドウを開き、 'ls'や 'which'などのUNIXコマンドを入力することができます。 私はこれら2つの質問が関連しているという感覚を持っています。 – UhClem

+0

Sinan、 "DOS"はDOSコマンドウィンドウを意味しました。これは恐竜時代からのホールドオーバーです。 "Windowsコマンドラインインターフェイス"はおそらくより正確です。 %PATH%についての良い点。私はパスのCYGWIN \ binに気付き、それがCygwinのインストールの標準であると仮定していました。しかし、自分のPC(Cygwinもインストールされている)を確認したところ、%PATH%にはCYGWINはありません。 – UhClem

1

未確認:

dirは組み込みコマンドコマンドインタプリタです。 /cまたは/kスイッチを使用してコマンドインタープリタを実行してから、実行するコマンドを実行します。

+0

非常に役に立ちます。ありがとうございました! – UhClem