rom*_*m1v 7 windows mingw-w64 msys2
在Windows上,如果我启动c:\msys64\mingw64.exe,它将打开一个外壳程序,可以在其中构建我的项目,例如,调用releasebash脚本(为简化起见)。一切正常。
现在,我想直接在没有交互的情况下执行release脚本mingw64。
我试过了:
c:\msys64\mingw64.exe /c/the/full/path/release
Run Code Online (Sandbox Code Playgroud)
窗口打开和关闭,它不起作用。
我试图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 ...
Run Code Online (Sandbox Code Playgroud)
因此,很明显,环境与execute c:\msys64\mingw64.exe然后call 时的环境不同ls。
如何执行我的release脚本,就像我在shell中一样mingw64.exe?
要在MSYS2中运行Bash shell脚本而不显示窗口,应右键单击桌面或Windows资源管理器中的其他位置,选择“新建”,选择“快捷方式”,然后为快捷方式目标输入以下内容:
C:\msys64\usr\bin\mintty.exe -w hide /bin/env MSYSTEM=MINGW64 /bin/bash -l /c/Users/rom1v/project/release.sh
Run Code Online (Sandbox Code Playgroud)
请注意,这里有4条路径。到PATH mintty和release.sh是绝对路径,你将需要调整。这些路径env和bash相对于你的MSYS2安装目录。还请注意,第一个路径必须是标准Windows路径,因为Windows希望在运行快捷方式时使用该路径。
这听起来很奇怪,使用MinTTY了非交互脚本,但我们需要使用一些程序被编译为Windows子系统(-mwindows选项GCC),或者当我们运行程序的其他Windows会自动启动新的控制台。我们将-w hide选项传递给MinTTY,以告知它不实际显示窗口。该选项之后的所有内容均解释MinTTY为要运行的命令。
因此MinTTY将从/bin/envMSYS2发行版运行,并将其余的参数传递给它。这是一个方便的实用程序,实际上是Linux和MSYS2的标准部分。它将MSYSTEM环境变量设置为MINGW64(稍后很重要),然后运行/bin/bash与其余命令行参数一起运行。
我们传递-l给Bash,以便它充当登录脚本,并运行某些启动脚本。特别地,/etc/profile来自MSYS2 的脚本是必不可少的,因为它查看MSYSTEM环境变量,将其视为,MINGW64然后设置一堆其他环境变量(例如PATH)来为您提供MinGW 64位Shell环境。
最后,我们将脚本名称作为主要参数传递给bash,因此它将在运行初始化脚本后运行该脚本。
请注意,如果您的Bash脚本有错误,您将不会收到任何通知,因为上面的快捷方式不会打开任何控制台窗口。我个人会觉得很烦。我可能会删除该-w hide选项,然后制作一个包装的bash脚本,该脚本只执行以下操作:
run_my_main_script || sleep 10000
Run Code Online (Sandbox Code Playgroud)
因此,如果主脚本成功执行,请立即退出,否则将窗口保持打开状态10000秒。您甚至不必将该包装脚本放在自己的文件中,只需将其放在快捷方式中作为Bash -c选项的参数即可(不要忘记将其包装在双引号中)。
感谢@David Grayson 的回答,我设法release从 Windows 控制台 ( cmd) 中使用 msys2/mingw调用了我的脚本,并在以下位置添加了其他目录(对于 Java 和 Meson)$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"
Run Code Online (Sandbox Code Playgroud)
小智 5
另一种方法是使用msys2_shell.cmdMSYS2 安装文件夹中的启动器。假设它已安装到默认文件夹,命令如下:
C:\msys64\msys2_shell.cmd -defterm -no-start -mingw64 -here -c "your command here"
Run Code Online (Sandbox Code Playgroud)
该选项-defterm将输出发送到当前终端,-no-start使新的终端窗口不打开,-here使当前目录作为工作目录,-mingw64是要使用的环境(其他可能性是-mingw32, -ucrt64, -clang64),并且-c是您的 shell 命令本身。
| 归档时间: |
|
| 查看次数: |
4425 次 |
| 最近记录: |