Windows 终端预览版中有 MSYS shell?

Windows 终端预览版中有 MSYS shell?

[编辑后添加:] 事实证明,这里的实际问题是我犯了一个愚蠢的打字错误。我实际问题的答案是“是的,你只要做显而易见的事情,它就会起作用,如果你不是个白痴的话”。我接受基本上是这么说的答案,但事实上这个问题可能应该被删除。

我的雇主在 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。只需单击“添加新个人资料”并指定“命令行”场地。

终端

相关内容