Answers:
我只是遇到了这个问题。为了使zsh运行,我这样做:
mingw32_shell.bat
pacman -Syu
pacman -Sy zsh curl
exit
- 我没有运行zsh
在安装后立即。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
0
创建.zshrc文件。配置完成后,我看到了:
zsh-newuser-install:1119: command not found: rm
看起来不太正确...因为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)"
rm
实际上是真正无辜的。/usr/share/zsh/functions/Newuser/zsh-newuser-install
脚本的末尾包含一个rm -f $tmpfile*
要清除的。与我的Fedora安装版本中的完全相同/usr/share/zsh/5.7.1/functions/zsh-newuser-install
。
编辑/etc/nsswitch.conf
,然后更改以下设置:
db_shell: /bin/zsh
msys2_shell.cmd
bat文件中设置外壳,但是.cmd
如果您必须从.exe
s 文件之一开始,则在文件中更改外壳不会影响外壳
当不支持更改默认外壳程序时,一种使用所需外壳程序的方法是在默认外壳程序启动时立即启动它。
例如,只写zsh
对~/.bashrc
,而当bash启动,它将运行zsh的为您服务。流浪bash进程如何继续运行,注销时必须退出shell两次。为了使它更好,请编写exec zsh
而不是zsh
,用这种方法,将bash进程完全替换为zsh进程。
这种方法并不完美,但在大多数情况下应该可以正常工作。与更改硬编码值相比,它可能导致较少的兼容性问题。
首先在StackOverflow的此答案中提到它。
我的安装并没有在接受的答案中提到的文件(msys2_shell.bat
,mingw32_shell.bat
,和mingw64_shell.bat
)。
相反,我的Win10系统MSYS2安装(使用installer文件msys2-x86_64-20161025.exe
)只有一个文件,msys2_shell.cmd
其行如下:
set "LOGINSHELL=bash"
我更改bash
为zsh
。到目前为止似乎工作正常。
.exe
文件启动msys2,则不会设置外壳程序,因此请查看Alan Pearce的答案
我有一个解决方案,但是它要求您使用ConEmu而不是当前使用的任何其他终端。在我看来,请尝试一下,它是Windows上最好的终端应用程序。
首先,您需要使用pacman安装zsh。我想你已经走了那么远。然后,您需要安装ConEmu(可以使用Chocolatey进行安装,也可以只从conmumu站点下载安装程序来安装)。在ConEmu设置的“任务”下,您应该添加一个新任务。它可能已经有一个被叫之类的Bash::Msys2-64
东西,所以也许您会给一个被叫Zsh::Msys2-64
。该名称在任何情况下都是任意的。在此新任务的“命令”框中,您基本上可以从中复制命令Bash::Msys2-64
并zsh.exe
在适当的地方替换。我的就像:
set CHERE_INVOKING=1 & %ConEmuDrive%\msys64\usr\bin\zsh.exe --login -i -new_console:C:"%ConEmuDrive%\msys64\msys2.ico"
然后,在ConEmu的“启动”选项中,可以将其设置为启动任务,以便每次打开ConEmu都可以直接进入Zsh。显然,您还可以设置一个按键组合以将其打开,或者在新选项卡中打开任何其他任务或您想要的任何东西。ConEmu有很多选项,因此我确定您可以根据需要进行设置。
MSYS2开发人员显然会继续更改其设置,因为在最新安装中,msys2_shell
Windows中安装的用于启动MSYS2环境的命令接受一个-shell
参数。
因此,要使用其他外壳,可以编辑一个或多个MSYS2 / MinGW 32 / MinGW 64启动器的属性,并更新目标以添加-shell zsh
或进行其他操作。(如果外壳$PATH
足够用于MSYS环境,则不需要完整路径。)
因此,对于Win7“开始”菜单上“ MSYS2 64bit”中的“ MSYS2 MinGW 64位”启动器:
目标: C:\msys64\msys2_shell.cmd -mingw64
目标: C:\msys64\msys2_shell.cmd -mingw64 -shell zsh
这似乎是永久切换的最简单,最兼容的方式,因为您的更改不会被升级或其他方式抹去。
奇怪的是,启动器不尊重任何环境变量,注册表项等。除非-shell
在命令行中传递以覆盖它,LOGINSHELL=bash
否则将使用它最初强制使用的默认值。
编辑:下面适用于早期版本的MSYS2。自2020年1月21日起,不再需要它。FeRD的回答似乎效果最好。
我想用鱼代替猛击。不幸的是,这里的大多数方法都不起作用,可能是因为fish的语法是如此不同。
最有效的方法是wzhd exec fish
在bash开始时首先将其运行的想法。但是,仍然存在一个问题:如果我想使用bash,我必须进行编辑.bashrc
以删除该行,因为即使我从fish运行它,它也只会启动另一个fish实例。
最好的办法是确保它exec fish
在msys2启动时运行,而不是在bash每次启动时运行。
我找到的方法是通过msys2_shell.cmd
msys2的安装文件夹中的文件。我发现这些行:
set SHELL_ARGS=
:collectparams
if not "x%~1" == "x" set SHELL_ARGS=%SHELL_ARGS% %1& shift& goto :collectparams
看来他们正在定义要在bash开始时立即传递给bash的参数,但仅在该脚本运行时才传递(不同于.bashrc
)。所以我在下面添加了这一行:
set SHELL_ARGS=%SHELL_ARGS% -c "exec fish"
到目前为止,一切似乎还不错。一旦前者完成加载,启动msys2就会用fish替换bash,但是如果我需要bash命令行,我仍然可以使用来启动它bash
。