2017-02-01 10 views
1

と「./」のbash /バッチファイルの後、同様のアイデアが行く、ランcygwinの

私はLinux用のbashのファイルを持っているが、そこに私は明らかに./my_runを作ることによって、それを実行します。 問題は私がウィンドウにあるのでcygwinをダウンロードしてインストールしたことです。 環境変数にcygwin binを追加し、少なくとも "ls"が動作することを確認して、私がうまくやったと推測しました。 私はそれが表示さcmdをして、それを実行しよう:

'.' is not recognized as an internal or external command, 
operable program or batch file. 

(私はLSと作品を試してみました言ったように)cygwinの変数が正しくインストールされていなかったかのように。 次にcygwinで直接試しましたが、./my_runを実行すると正しく動作するようになりました。

だから私は私のようないくつかのコマンドを使用することができますが、やっているときに./ cmdで動作しませんか?これをどうすれば解決できますか?

+2

スクリプトのコンテンツを投稿できますか? – chrootzius

+0

申し訳ありませんが、スクリプトが正常に動作しました。問題はmy_run.batに変更した後、my_runに戻ってファイルが "破損"していたので問題が発生しました。 gitから元のファイルを再度ダウンロードすると、cygwin上でしか動作しませんでした。今私はちょうどそれがなぜcmdで動作しないのかを今望んでいます。 PS:ありがとう!それは速い応答でした –

+2

うわー、実際には、bashとバッチファイルの両方のタグが必要です。つまり、2つの言語はまったく異なり、Windowsの改行文字をUNIXの改行文字に変換する必要があります(適切なテキストエディタにはこのオプションがあります)。またはスクリプトをバッチで完全に書き直す必要があります。 – SomethingDark

答えて

2

さて、cygwinは共有ライブラリであり、それを使用している多くのもの(プログラム)(Cygwinを読んでください)です。 cygwin.dllは、./my_scriptと言うことができるように内部でパスの解像度を/に変更し、実際にWindowsを呼び出す前に.\my_scriptに変換し、実行可能ファイルに適切な拡張子を追加してWindowsバイナリを実行できるようにします。この魔法はあなたが使っている限り持続します。 cmd.exeは、Microsoft Windowsのコマンドシェルで、Cygwinの共有ライブラリを完全に認識していないため、それを使用しないため、zetabyteの環境にデータを移入したとしても、パス変換のために呼び出されることはありません。 Cygwinターミナルで実行すると、bashシェルが実行されます。これは、Cygwin実行ファイルで、cygwin.dllにリンクされています。すべてのUnixシステムコールエミュレーションにCygwinライブラリを使用することができます。 exec("./my_script", ...);に変換すると、内部で変換され、./my_script、次に.\my_script./my_script.exe、...となり、.com.bat拡張の場合も同じです。

この事実は、しばしば、Cygwinは良い、効率的な環境ではないと言う人がいます。しかし、その目的は効率的ではなく(エントリをキャッシュして効率的であるようにするためですが)、互換性があります。

あなたの例では、lsは、Unixシステムから実行可能な/bin/lsを模倣するCygwin実行ファイルです。これはCygwinライブラリを使用しているので、すべてのパス解決が適切に行われます(いくつかの制約の下で、いくつかのテストの後に表示されます)、すべて正常に動作します。しかし、すべてのWindowsアプリケーションが突然変身して、別の環境のどこにいるかのように作業を開始することはできません。これには、自分で試してみなければならない試行錯誤のアプローチが必要です。そして、Cygwinのドキュメントを読んで、それは非常に良いと私がここで言ったすべてをカバーしています。

0

Cygwinを開いてそこでコマンドを実行すると、うまくいくはずです。

+0

しかし、なぜcmdが動作しないのですか?つまり、env変数を追加してもうまくいかないという奇妙な理由がある場合は... ...もしそうなら...私はlsを使っているのでしょうか? –

+1

'。/'は環境変数ではありません。現在のディレクトリを参照します。 cmdで 'bash my_file'と入力すると動作しますか? – PinkFluffyUnicorn

+0

bash my_fileで動作します!大いに感謝する! –