更改 MSYS2 上的默认 shell

sor*_*bet 18 windows shell msys

我想将 MSYS2 的默认 shell 从 更改bashzsh.

我试过chsh- 在 MSYS2 中不可用。
编辑/etc/passwd什么都不做。它似乎被忽略了。

我查看了 MSYS2 根目录中的批处理脚本,并bash进行了硬编码。我将每个都更改/usr/bin/bash/usr/bin/zsh,效果很好,直到我尝试使用 MinGW。

如果可能的话,我在哪里可以(正确)更改 MSYS2 的外壳?

Ala*_*rce 28

我使用较新的 msys2-launcher 遇到了这个问题,它提供了.exe启动器而不是批处理文件。

为此,只需更改.iniMsys2 根目录中的启动器旁边的文件(对于 64 位安装,它可能包含msys2.ini,mingw32.inimingw64.ini)。对于每个 ini 文件,添加一行来设置 shell:

SHELL=/usr/bin/zsh
Run Code Online (Sandbox Code Playgroud)

  • 不再工作 (14/03/19) (3认同)
  • 这是截至 2018 年 7 月更新的 msys2 的正确答案。接受的答案不再有效。 (2认同)

小智 9

我刚刚遇到了这个问题。为了让 zsh 运行,我这样做了:

  • 安装 MSYS2
  • 从我安装 MSYS2 的目录中,我跑了 mingw32_shell.bat
  • 通过运行升级所有已安装的软件包 pacman -Syu
  • 通过运行安装 zsh 和 curl pacman -Sy zsh curl
  • 通过运行关闭 MinGW shell exit-我没有zsh在安装后立即运行。
  • 编辑 msys2_shell.bat、mingw32_shell.bat 和 mingw64_shell.bat 并将每个实例更改 start %WD%mintty -i /msys2.ico /usr/bin/bash --login %* 为:( start %WD%mintty -i /msys2.ico /usr/bin/zsh --login %* 截至 2015-09-23 的第 39 行)
  • mingw32_shell.bat
  • 在 zsh 配置菜单中,我选择0创建 .zshrc 文件。

配置完成后,我看到:

zsh-newuser-install:1119: command not found: rm
Run Code Online (Sandbox Code Playgroud)

这看起来不正确......因为rm在健康的 *nix 系统上永远不会发现网络(我猜这是 MSYS2 的 zsh 包的一个错误),但在那之后一切都运行良好。

当我第一次尝试这个时,我打开了一个批处理文件来创建一个新会话,我收到了一个关于 zsh 的内存空间已经被占用的错误。为了解决这个问题,我关闭了所有打开的 MinTTY 窗口并autorebase.bat在 MSYS2 安装目录中运行该文件。之后一切正常。

然后我安装了 oh-my-zsh。使用:

sh -c "$(curl -fsSL https://raw.github.com/robbyrussell/oh-my-zsh/master/tools/install.sh)"


FeR*_*eRD 8

MSYS2 开发人员显然不断改变他们的设置,因为在最新的安装中,msys2_shellWindows 中安装的用于启动 MSYS2 环境的命令接受一个-shell参数。

因此,要使用不同的 shell,您可以编辑 MSYS2 / MinGW 32 / MinGW 64 的一个或多个启动器的属性,并更新目标以添加-shell zsh或其他内容。(如果 shell 适用$PATH于 MSYS 环境就足够了,则不需要完整路径。)

因此,例如我的 Win7 开始菜单上“MSYS2 64bit”中的“MSYS2 MinGW 64-bit”启动器:

目标:C:\msys64\msys2_shell.cmd -mingw64
目标:C:\msys64\msys2_shell.cmd -mingw64 -shell zsh

这似乎是永久切换的最简单且最兼容的方法,因为您的更改不会因升级或其他原因而消失。

奇怪的是,启动器不尊重任何环境变量、注册表项等。除非-shell在命令行上传递来覆盖它,否则LOGINSHELL=bash将使用它最初强制的默认值。


Teh*_*ppo 6

编辑/etc/nsswitch.conf,并更改以下设置:

db_shell: /bin/zsh
Run Code Online (Sandbox Code Playgroud)