要在MSYS2中运行Bash shell脚本而不显示窗口,您应该右键单击桌面或Windows Explorer中的其他位置,选择“新建”,选择“快捷方式”,然后为快捷方式目标输入类似以下内容:
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子系统编译的(使用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
),以提供MinGW 64位shell环境。
最后,我们将您的脚本名称作为
bash
的主参数传递,因此在运行初始化脚本后它将运行该脚本。
请注意,如果您的Bash脚本出现错误,您将不会收到任何通知,因为上面的快捷方式不会打开任何控制台窗口。我个人觉得这非常烦人。我可能会删除
-w hide
选项,然后制作一个包装Bash脚本,只需执行以下操作:
run_my_main_script || sleep 10000
所以如果主脚本成功,立即退出,否则保持窗口打开10000秒。您甚至不必将包装器脚本放在自己的文件中,您可以将其作为Bash的
-c
选项的参数放入快捷方式中(不要忘记用双引号括起来)。
msys2_shell.cmd -mingw64 -c "help |more"
- KonstantinL/bin/env
之前的所有内容,并将/bin/env
替换为相同程序的绝对Windows风格路径。运行mintty可能会阻止你获取输出。 - David Grayson