Windowsでは、c:\msys64\mingw64.exe
を起動すると、シェルが開き、プロジェクトをビルドできます。たとえば、release
bashスクリプトを呼び出します(簡単にするため)。すべてが正常に動作します。
ここで、release
スクリプトをmingw64
で、対話せずに直接実行したいと思います。
私は試した:
c:\msys64\mingw64.exe /c/the/full/path/release
ウィンドウが開閉しますが、機能しません。
bash
を直接使用しようとしましたが、環境が正しく設定されていないようです。
> c:\msys64\usr\bin\bash -c ls
/usr/bin/bash: ls: command not found
> c:\msys64\usr\bin\bash -c /bin/ls
... it works ...
したがって、環境がc:\msys64\mingw64.exe
を実行してからls
を呼び出す場合と同じではないことは明らかです。
mingw64.exe
で開始されたシェルにいるかのように、release
スクリプトを実行するにはどうすればよいですか?
ウィンドウを表示せずにMSYS2でBashシェルスクリプトを実行するには、デスクトップまたはWindowsエクスプローラーの別の場所を右クリックし、[新規]、[ショートカット]の順に選択して、ショートカットターゲットに次のように入力する必要があります。
C:\msys64\usr\bin\mintty.exe -w hide /bin/env MSYSTEM=MINGW64 /bin/bash -l /c/Users/rom1v/project/release.sh
ここには4つのパスがあることに注意してください。 mintty
とrelease.sh
へのパスは、調整する必要のある絶対パスです。 env
およびbash
へのパスは、MSYS2インストールディレクトリからの相対パスです。また、Windowsはショートカットの実行時にそれを想定しているため、最初のパスは標準のWindowsパスでなければならないことにも注意してください。
非対話型スクリプトにMinTTY
を使用するのは奇妙に思えるかもしれませんが、Windowsサブシステム用にコンパイルされたsomeプログラムを使用する必要があります(GCCの-mwindows
オプション) 、またはプログラムを実行すると、Windowsは自動的に新しいコンソールを起動します。 -w hide
オプションをMinTTYに渡して、実際にウィンドウを表示しないように指示します。そのオプションの後のすべては、実行するコマンドとしてMinTTY
によって解釈されます。
したがって、MinTTYはMSYS2ディストリビューションから/bin/env
を実行し、残りの引数をそれに渡します。これは、実際にはLinuxとMSYS2の標準部分である便利なユーティリティです。 MSYSTEM
環境変数をMINGW64
(後で重要になります)に設定してから、残りのコマンドライン引数を使用して/bin/bash
を実行します。
-l
をBashに渡して、ログインスクリプトとして機能し、特定の起動スクリプトを実行します。特に、MSYS2の/etc/profile
スクリプトは、MSYSTEM
環境変数を調べ、それがMINGW64
であることを確認してから、他の環境変数の束を設定するため、不可欠です(例:PATH
)MinGW64ビットシェル環境を提供します。
最後に、スクリプトの名前をメイン引数としてbash
に渡すため、初期化スクリプトの実行後にそのスクリプトが実行されます。
上記のショートカットではコンソールウィンドウが開かないため、Bashスクリプトにエラーがある場合は通知が届かないことに注意してください。個人的にはかなり面倒だと思います。おそらく-w hide
オプションを削除してから、次のようなラッパーbashスクリプトを作成します。
run_my_main_script || sleep 10000
したがって、メインスクリプトが成功した場合は、すぐに終了します。それ以外の場合は、ウィンドウを10000秒間開いたままにします。そのラッパースクリプトを独自のファイルに配置する必要はありません。Bashの-c
オプションの引数としてショートカットに配置するだけです(二重引用符で囲むことを忘れないでください)。
@David Graysonからの回答のおかげで、Windowsコンソール(release
)からmsys2/mingwを使用してcmd
スクリプトを、追加のディレクトリ(JavaおよびMeson)in $PATH
:
c:\msys64\usr\bin\env MSYSTEM=MINGW64 c:\msys64\usr\bin\bash -l -c "PATH=\"/c/Program Files/Java/jdk1.8.X_XXX/bin:/c/Program Files/Meson:$PATH\" /c/Users/rom1v/project/release"