cmd は /cygdrive/c/ 内のファイルを実行できません

cmd は /cygdrive/c/ 内のファイルを実行できません

私は Ruby on Rails アプリケーションを実行しています。アプリケーション内には、 という実行可能ファイルの場所を特定する Ruby Gem がロードされていますpngcrush。これを行うには、コマンド を実行しwhich pngcrush、 を返します/cygdrive/c/Windows/system32/pngcrush。ただし、gem がシステム コールを使用してコマンドを発行しようとすると`/cygdrive/c/Windows/system32/pngcrush somefile.jpg newfile.jpg`失敗します。ファイルは見つけられるものの、実行できないようです。おそらく、cmdではなく内で実行されているためですbash

つまり、 内で とcmd入力する/cygdrive/c/Windows/system32/pngcrushと、 が表示されますThe system cannot find the path specifiedcmd内で と入力しbash、 bash 内で同じことを入力すると、動作します。 Gem は他の誰かが作成したものなので、変更できません。

答え1

ruby のようなプログラムは、/cygdrive/c/windows/ のようなパスを取らないと思います。むしろ、独自の環境があり、その環境が何であるかを把握してから、他のコマンドを実行してパスを出力し、他のプログラムを呼び出す方法を理解する必要があります。

答え2

Windows バージョンの pngcrush の代わりに、または Windows バージョンの pngcrush に加えて、cygwin バージョンの pngcrush をインストールします。cygwin バージョンは正常に動作するはずです。

関連情報