[编辑后添加:] 事实证明,这里的实际问题是我犯了一个愚蠢的打字错误。我实际问题的答案是“是的,你只要做显而易见的事情,它就会起作用,如果你不是个白痴的话”。我接受基本上是这么说的答案,但事实上这个问题可能应该被删除。
我的雇主在 Windows 上进行软件开发的标准设置涉及使用 MSYS。(传统 MSYS 或 MSYS2。)有没有办法在新的 Windows 终端内运行其中任何一个的 shell?
sh.exe
传统的 MSYS 有一个 Windows 批处理脚本,该脚本安排在运行它的任何终端内执行。profiles.json
因此,您可能会认为在 WT 中使用 创建一个新配置文件"commandline": "path\to\sh.exe"
就可以解决问题。唉,不行:如果我这样做并要求 WT 提供该类型的终端,我会得到一个普通的旧cmd
提示。(从 开始C:\WINDOWS\System32
。)[编辑以添加:] 呃,不是,是的:如果我这样做,那么它基本上可以工作,但这会出错,而接受的答案是正确的。
您运行以获取 MSYS2 提示符的东西是 Windows 可执行文件,而不是传统 MSYS 中的批处理脚本,但它也会启动自己的sh.exe
。 同样的事情也发生在那。
我猜测这里发生的情况是,MSYSsh.exe
只是希望通过 stdin 和 stdout 进行交互,而适合直接从 WT 运行的可执行文件需要了解相当复杂的 Microsoft 控制台 API,或类似的东西。
我也尝试过以下方法,但不太乐观,也没有成功(它们都产生与上述相同的结果):
"commandline": "cmd path/to/sh.exe"
"commandline": "cmd /c path/to/sh.exe"
"commandline": "cmd path/to/msys2_shell.cmd"
"commandline": "cmd /c path/to/msys2_shell.cmd"
有没有什么方便的方法可以在 Windows 终端内运行 MSYS shell?
答案1
假设 MSYS2 安装在C:\msys2
文件夹中,Windows 终端的命令行条目将是C:\msys2\usr\bin\bash.exe -i -l
。因此 中的条目profile.json
将是:
{
// Make changes here to the MSYS2 profile
"guid": "{0caa0dad-35be-5f56-a8ff-afceeeaa6101}",
"name": "msys2",
"commandline": "C:\\msys2\\usr\\bin\\bash.exe -i -l",
"hidden": false
},
该命令bash.exe
从 MSYS2 环境启动,带有--interactive
和--login
选项。这些选项是设置特定于 MSYS2 的环境所必需的。有关如何在 Windows 终端profile.json
文件中添加条目的更多信息,请参阅本文档来自 Microsoft Temrminal GitHub 存储库。
答案2
MSYS2 具有他们自己的指南将 MSYS2 添加到 Windows 终端。它msys2_shell.cmd
代替手动运行 shell。
Usage:
msys2_shell.cmd [options] [login shell parameters]
Options:
-mingw32 | -mingw64 | -ucrt64 | -clang64 | -msys[2] Set shell type
-defterm | -mintty | -conemu Set terminal type
-here Use current directory as working
directory
-where DIRECTORY Use specified DIRECTORY as working
directory
-[use-]full-path Use full current PATH variable
instead of trimming to minimal
-no-start Do not use "start" command and
return login shell resulting
errorcode as this batch file
resulting errorcode
-shell SHELL Set login shell
-help | --help | -? | /? Display this help and exit
Any parameter that cannot be treated as valid option and all
following parameters are passed as login shell command parameters.
我认为手册本身就很容易理解。这里重要的标志是-no-start
和-defterm
。但在这里,我想添加更多标志。我添加的是-here
指南推荐的标志,和-shell
,因为我想选择另一个 shell。您可以根据需要对其进行自定义。
C:\\msys64\\msys2_shell.cmd -defterm -here -no-start -mingw64 -shell zsh
因此,JSON 配置文件将是
{
"guid": "{05351409-756a-416f-81c1-a97a1a2cdfe2}",
"name": "MINGW64",
"commandline": "C:\\msys64\\msys2_shell.cmd -defterm -here -no-start -mingw64 -shell zsh",
"hidden": false
},
对于 GUID 字段,你可以[guid]::NewGuid().Guid
在 PowerShell 中生成自己的字段,也可以使用在线服务,例如这个。它只是标识该配置文件与其他可能具有相同名称的配置文件不同。
对于最新版本的 Windows 终端,您无需手动编辑 JSON 文件,它还会为您生成 GUID。只需单击“添加新个人资料”并指定“命令行”场地。