2011-11-27 22 views
18

Cygwinがインストールされるとき、Windowsで起動するバッチファイルがあります。しかし、Cygwinを起動せずに "./script"を実行しないでスクリプトを実行したい場合はCygwinは1つのバッチファイルからスクリプトを実行していますか?

これを行うにはどうすればよいのですか?

と同じように、クリックするとCygwinが開き、シェルスクリプトが実行されます。

答えて

27

部分はあなたの選択したインストール場所に応じて異なる場合がありますcygwin。

+0

はいこれが動作します..ありがとう – dhroove

3

どのような種類のシェルスクリプトですか?バッシュ? bashスクリプトを実行する必要がある場合は、ショートカットを使用してbash.exeを実行してください。ターゲットは次のようになります。

C:\cygwin\bin\bash.exe foo.bsh 

bash.exeへのパスは、cygwinがインストールされた場所によって異なります。 (binディレクトリがパス環境変数にある場合、パスはまったく必要ありません。)

必要に応じて、同じことをバッチスクリプトで実行できます。コマンドラインは上記の "target"と同じです。


EDITコメントに基づいて(まだ仮定のbash):ちょうど入力あなたのバッチスクリプト(.BAT)におけるよう

は、[OK]を:

bash.exe script.txt 

あなたが追加する必要があります"bash.exe"へのパス。 "bash.exe"がどこにあるのかわからない場合は、質問に記載した "Cygwin.bat"ファイルを開きます。それはchdirコマンドのパスを持つ必要があります。 (注:Cygwin.batは対話モードでbash.exeを実行しているだけで、実際には "cygwin"という名前のファイルは実行されません)。

"script.txt"にパスを追加する必要がありますバッチスクリプトと同じディレクトリに置いてください。

これもまた、バッチスクリプトの代わりにショートカットでも機能します。

set PATH=C:\cygwin\bin;%PATH% 
    c:\cygwin\bin\bash.exe c:\path\to\foo.bsh 

「C:\ cygwinの\ binに」、「foo.bsh」を実行し、以下の内容でバッチファイルを作成し、それを実行するには

+0

まあ、シェルスクリプトを実行したいです。しかし私はCywginを開いて、それを実行するためにすべてのものを入力する必要はありません。むしろcygwinを開くためのバッチファイルを実行し、可能であればその方法で実行したいと思います。 – Aaron

+1

@Aaron - すべてのものを入力しますか? Cygwinでスクリプトを実行するために使用するコマンドライン引数を含むコマンドラインは、ショートカットまたはバッチスクリプトに追加できます。 Cygwinは開きませんが、cmdウィンドウが開きます。スクリプトの実行が終了すると終了します。 –

+0

私はcygwinで動作するシェルスクリプトを持っています。私はそれをすべて入力するのではなく、私のためにすべてを行うバッチファイルを作成できるかどうか疑問に思っていましたか?しかし、バッチファイルでcygwinを使う方法がわかりません。 – Aaron

8

あなたはBASH(または任意のSH-バリアント)にCMDからトランポリンにこのような何かを試してみてください:

: <<TRAMPOLINE 
    @echo off 
    bash -c "exit 0" || (echo.No bash found in PATH! & exit /b 1) 
    bash "%~f0" "%*" 
    goto :EOF 
    TRAMPOLINE 
    ##################### 
    #!/bin/bash -- it's traditional! 
    echo "Hello from $SHELL" 
+1

これはうまく動作しましたが、ファイルを保存するときにUNIXスタイルの行末を使用しなければならず、bashスクリプトが幸せであることを確認しました。 – gdt

5

私はそれをせずに作業できるようにするためにオースティンヘイスティングスによって与えられた答えに拡大したいと思いますCygwinを使用し、batファイルを使用してディレクトリ設定を行います(別の "Start in"パスのショートカットでも使用されます)。変更はbashへの完全パスを含むようになります。オプション-lを使用して、パスと環境とともにbash設定を適切に行い、現ディレクトリを(shiftを使用して)ポップされた最初の引数としてbashに渡します。ファイル内でUnix改行を使うことを忘れないと、多くのエラーが発生します。また、ANSIの代わりにUTF8を使用してください。

: <<TRAMPOLINE 
@echo off 
C:\cygwin\bin\bash -c "exit 0" || (echo.No bash found in PATH! & exit /b 1) 
setlocal EnableDelayedExpansion 
for %%i in (%*) do set _args= !_args! "%%~i" 
C:\cygwin\bin\bash -l "%~f0" "%CD%" %_args% 
goto :EOF 
TRAMPOLINE 
##################### 
#!/bin/bash -- it's traditional! 
cd "$1" 
shift 
echo Working from $PWD 

編集:引数をbashに正しく渡すようにトランポリンコードを修正しました。 BATファイルには "$ @"のbashに相当するものはなく、各引数を処理するループが作成され、bash.exeに渡されます。スペースで引数を適切に処理するようになりました。

のgit-bash.exe(path_to_your_bash_file>)

P.S.:.BATするには、以下の行を記述し、任意の.BATファイルから "your_bash_file" を実行するには

+0

どのようにしてこのコマンドを終了できますか? 'TRAMPOLINE'の後に' exit/B'を置くことはできません。 –

+0

'TRAMPOLINE'行が' bash'に入った後で 'exit'と入力するだけです。 'exit/B'は' cmd'コマンドです。 – galmok

+0

私のケースでは、「exit」が動作していないように見えたので、私は尋ねました。私はログインシェル(-I)を作成していて、 '.bashrc 'などの中にバックグラウンドでぶら下がっていた余分なbashインスタンスを作成していたため(cmdウィンドウを強制終了させないようにする) 。 –

0

Windows Gitがインストールされている必要があります

1

また、minttyウィンドウでもこのスクリプトを開くには、これが(@ galmokの答えに基づいて)トリックを行います。

: <<TRAMPOLINE 
@echo off 
C:\Users\user\Downloads\cyg-packages\bin\bash -c "exit 0" || (echo.No bash found in PATH! & exit /b 1) 
setlocal EnableDelayedExpansion 
for %%i in (%*) do set _args= !_args! "%%~i" 
C:\Users\user\Downloads\cyg-packages\bin\mintty.exe -i /Cygwin-Terminal.ico C:\Users\user\Downloads\cyg-packages\bin\bash -l "%~f0" "%CD%" %_args% 
goto :EOF 
TRAMPOLINE 
##################### 
#!/bin/bash -- it's traditional! 
cd "$1" 
shift 
echo Working from $PWD 
vim "[email protected]" 

注:私のユースケースは、最後にvimへの呼び出しがある理由であるVisual Studioの、からターミナルのvimを開く必要がありました。その後、バッチファイルは終了します。

関連する問題