web-dev-qa-db-ja.com

WindowsでCygwinを介してシェルスクリプトを実行する

Linuxマシンで実行するために使用するシェルスクリプトがたくさんあります。ここで、Windowsに切り替えました。そこで、これらのスクリプトを実行する必要があります。 Cygwin がインストールされていますが、Cygwinを使用してスクリプトを実行する方法はありますが、呼び出しはWindowsバッチから行われます

58
rainman_s

承知しました。私の(かなりバニラの)Cygwinセットアップでは、bashc:\cygwin\binにあるため、次のようなコマンドを使用して、Windowsバッチファイルからbashスクリプト(たとえばtestit.sh)を実行できます。

C:\cygwin\bin\bash testit.sh

... .batファイルに含めることができるのは、コマンドラインで入力するのと同じくらい簡単で、同じ効果があります。

78
Simon

もう1つ-\r\n行末を生成するWindowsテキストエディターでシェルスクリプトを編集した場合、cygwinのbashは\rを受け入れません。スクリプトを実行する前にdos2unix testit.shを実行するだけです:

C:\cygwin\bin\dos2unix testit.sh
C:\cygwin\bin\bash testit.sh
38
Roman Hocke

WindowsでNotepad ++エディターにアクセスできる場合、この問題を簡単に回避できる機能があります。

  1. Notepad ++でエラーが発生しているファイルを開きます。
  2. [編集]メニューから[EOL変換]を選択します
  3. 「UNIX/OSX Format」用のオプションがあります。そのオプションを選択します。
  4. ファイルを再保存します。

私はこれを行い、問題を解決しました。

お役に立てれば!

詳細は http://danieladeniji.wordpress.com/2013/03/07/Microsoft-windows-cygwin-error-r-command-not-found/

25
jseals

ディレクトリの下のすべてのファイルにdos2unix修正を適用するためにこれを実行できることを追加したかっただけです。

find . -type f -exec dos2unix.exe {} \;

私はローマの答えに対するコメントとしてそれをしたいと思いますが、私はまだコメントにアクセスできません。

8
tsaulic

既存の回答はすべて、DOSコンソールウィンドウでこのスクリプトを実行しているようです。

これは受け入れられるかもしれませんが、たとえば、カラーコード(テキストの色を変更する)は機能せず、代わりにそのまま出力されることを意味します。

アイテム「[032mGroovy [0m」はありません

しばらく前にこの解決策を見つけたので、mintty.exeが標準のCygwinユーティリティかどうか、またはそれを取得するためにsetupプログラムを実行する必要があるかどうかはわかりませんが、次のように実行します。

D:\apps\cygwin64\bin\mintty.exe -i /Cygwin-Terminal.ico  bash.exe .\myShellScript.sh

...これにより、Windows DOSコンソールではなくCygwin BASHコンソールでスクリプトが実行されます。

1
mike rodent

スクリプトファイル名に常に.shを含めることを気にしない場合は、CygwinとUnix(Macbook)に同じスクリプトを保持できます。

説明する:
1。常に.shをスクリプトファイル名に含めます(例:test1.sh)
2。 test1.shは、例として次のようになります。
#!/bin/bash echo '$0 = ' $0 echo '$1 = ' $1 filepath=$1</ code> 3. Cygwinを使用するWindowsでは、「test1.sh」と入力して実行します
4。 Unixでは、「test1.sh」と入力して実行します


注:Windowsでは、エクスプローラーを使用して以下を1回実行する必要があります。
1。ファイルエクスプローラーを開きます
2。 test1.shなど、拡張子が.shのファイルを右クリックします
3。開く...-> sh.exeを選択
この後、Windows 10はすべての.shファイルをsh.exeで実行することを忘れません。

注:この方法を使用すると、実行するためにスクリプトファイル名にbashを追加する必要はありません。

1
david m lee