web-dev-qa-db-ja.com

Cygwinは1つのバッチファイルからスクリプトを実行していますか?

Cygwinをインストールするときに、WindowsでCygwinを起動するために使用されるバッチファイルがあることを知っています。しかし、Cygwinを起動して「./script」を実行せずにスクリプトを実行したい場合

それを行うバッチファイルを作成するにはどうすればよいですか?

のように...クリックするとCygwinを開き、シェルスクリプトを実行するバッチファイルが1つだけあります。

18
Aaron

「foo.bsh」を実行するには、次の内容のバッチファイルを作成して実行します。

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

「C:\ cygwin\bin」の部分は、cygwinの選択したインストール場所によって異なります。

27
Jakob Buron

CMDからBASH(またはshバリアント)にトランポリンするために、次のようなことを試してみてください。

    : <<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"
9
Austin Hastings

パスにCygwinがなくても動作し、batファイルを使用してディレクトリ設定で動作できるように、オースティンヘイスティングスの回答を拡張したいと思います(したがって、異なる "Start in"パスのショートカットも使用されます) 。変更は、bashへのフルパスを含めることです。オプション-lを使用して、パスと環境でbashを正しく設定し、ポップされた最初の引数として現在のディレクトリをbashに渡します(shiftを使用) )。ファイルで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に渡されます。スペースを含む引数を適切に処理するようになりました。

7
galmok

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

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

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

必要に応じて、バッチスクリプトで同じことを行うことができます。コマンドラインは上記の「ターゲット」と同じです。


コメントに基づいて編集(まだbashを想定):

では、バッチスクリプト(.bat)で次のように入力します。

bash.exe script.txt

「bash.exe」へのパスを追加する必要がある場合があります。 「bash.exe」の場所がわからない場合は、質問で言及した「Cygwin.bat」ファイルを開いてください。 chdirコマンドにパスが必要です。 (注:Cygwin.batは対話モードでbash.exeを実行しているだけです。実際には、「cygwin」という名前の何も実行していません。)

「script.txt」がバッチスクリプトと同じディレクトリにない場合は、「script.txt」へのパスを追加する必要もあります。

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

3
Daniel Haley

スクリプトをmintty windowsでも開く場合は、これ(@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 "$@"

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

2
Orwellophile

.batファイルから「your_bash_file」を実行するには、.batに次の行を書き込みます。

git-bash.exe(path_to_your_bash_file>)

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

0
FatAn