从命令提示符或 PowerShell 调用 MSYS2 Shell

Posted

技术标签:

【中文标题】从命令提示符或 PowerShell 调用 MSYS2 Shell【英文标题】:Invoke MSYS2 Shell from Command Prompt or PowerShell 【发布时间】:2015-01-04 18:08:08 【问题描述】:

从命令提示符或 PowerShell 开始(两者都可以;我可以弄清楚如何做另一个给定的),我如何调用 MSYS2 shell 来运行命令?

更具体的问题

我包含此信息是为了避免 XY 问题,但我坚信最好通过上述(更一般的)问题的答案来解决。

特别是,我希望编写一个 shell 脚本来更新Part III, Step 3 here 中列出的软件包。所以我需要类似的东西:

[invoke msys2 bash] -c "pacman -Sy --needed msys2-runtime"

直接调用 bash 可执行文件不起作用:

C:\>C:\msys64\usr\bin\bash.exe -c "pacman -Sy --needed msys2-runtime"
/usr/bin/bash: pacman: command not found

我认为这是环境问题。更改 PATH 以包含 MSYS2 的 bin 目录的路径也不能解决问题。当它试图安装一个包时,会发生不好的事情(nano 只是一个例子):

C:\>bash -c "pacman -Sy --needed --noconfirm nano"
:: Synchronizing package databases...
 mingw32 is up to date
 mingw64 is up to date
 msys is up to date
resolving dependencies...
looking for conflicting packages...

Packages (1) nano-2.3.6-2

Total Installed Size:  1.81 MiB
Net Upgrade Size:      0.17 MiB

:: Proceed with installation? [Y/n]
(1/1) checking keys in keyring                                                                   [########################################################] 100%
(1/1) checking package integrity                                                                 [########################################################] 100%
(1/1) loading package files                                                                      [########################################################] 100%
(1/1) checking for file conflicts                                                                [########################################################] 100%
(1/1) checking available disk space                                                              [########################################################] 100%
(1/1) upgrading nano                                                                             [########################################################] 100%
error: command (/usr/bin/bash /usr/bin/bash -c . /tmp/alpm_shqjUE/.INSTALL; post_upgrade 2.3.6-2 2.3.2-1 ) failed to execute correctly

尝试调用批处理文件 (C:\msys64\msys2_shell.bat) 在新窗口中打开一个新 shell,这让我不知道它是失败还是成功。

那么我怎样才能让shell进入MSYS2的正常状态呢?

【问题讨论】:

我现在无法测试,但不妨试试bash -i -c ...bash -l -c ...bash -i -l -c ... 【参考方案1】:

我们正在努力修复我们混乱的更新程序,我们希望它不会出现问题。

当我们在以下位置创建新安装程序时,您可以看到我们如何从批处理文件中调用 MSYS2 的一些示例:

https://github.com/Alexpux/MSYS2-packages/blob/master/msys2-installer/make-msys2-installer.bat

但正如@StevenPenny 建议的那样,

bash -l -c "pacman ..."

是正确的方法。

【讨论】:

太棒了!谢谢!我毫不怀疑 MSYS2 团队正在努力解决这个问题,但与此同时,除了每次手动打开一个新的 shell 之外,我只是想要一个解决方法。 =) bash -l -c 似乎可以很好地设置 DISPLAY。但是对于exo-open来说似乎失败了。 “找不到命令”关于如何使用 bash 运行 exo-open 的任何想法? 答案中的链接已失效。

以上是关于从命令提示符或 PowerShell 调用 MSYS2 Shell的主要内容,如果未能解决你的问题,请参考以下文章

我如何使用需要从命令提示符/批处理文件引用的参数调用PowerShell Start-Process命令?

node执行cmd或shell命令

怎么在powershell里面运行cmd命令

颤振医生不适用于命令提示符或 PowerShell 窗口?

PowerShell 代码在从 PowerShell 命令提示符运行时有效,但在双击运行或转换为可执行文件时无效

UI Automation技术获取cmd或Powershell命令提示符窗口的实时内容