如何更改 Cygwin 中的默认 shell?

gya*_*guy 33 cygwin bash zsh shell oh-my-zsh

我正在尝试将我的默认 shell 从 bash 更改为 cygwin 中的 zsh。

  1. chshcygwin 上没有正常的 unix 命令
  2. 在现有版本的 cygwin 中似乎不再使用 etc/passwd 文件。

那么如何更改默认外壳呢?

Ste*_*ven 26

答案取决于您如何启动 Cygwin。

如果使用Cygwin.bat启动 Cygwin ,请修改/Cygwin.bat(通常为C:\cygwin\C:\cygwin64\)的最后一行。

如果使用mintty启动 Cygwin ,则添加 shell 作为参数: mintty /usr/bin/zsh -

  • mintty 的例子对我来说不太适用。它有问题,直到我通过添加 `-l` 使它成为登录 shell:`mintty.exe -i /Cygwin-Terminal.ico /usr/bin/zsh -l -` (4认同)
  • 谢谢,我正在使用 Conemu。必须在 Conemu 设置 > 启动 > 任务 > bash Cygwin Bash > `set CHERE_INVOKING=1 & %ConEmuDrive%\CygWin\bin\sh.exe --login -i` 中将 `sh.exe` 更改为 `zsh.exe` (2认同)

小智 26

如果mintty.exe直接运行或从开始菜单或桌面运行 Cygwin Terminal(这是 mintty.exe 的快捷方式),则可以将 Windows 中的 SHELL 环境变量设置为/usr/bin/zsh.

在 Windows 7 上:

  1. 按 Windows 键。
  2. 开始输入“环境”。
  3. 当它出现时,选择“为您的帐户编辑环境变量”。

其余的应该是不言自明的。

  • 这真的需要更多的赞成票。我从未在任何地方看到过这种记录,这显然是预期的方法。 (5认同)

小智 16

复制自我在 Stack Overflow 上的回答


您可以编辑 /etc/nsswitch.conf,而不是创建一个 passwd 文件,Cygwin建议不要使用1。添加或编辑以下行:

db_shell: /usr/bin/fish

这种方法的不利/有利方面是,如果您有多个用户,则此更改会影响所有用户。好的一面是它非常简单。唯一的问题是您必须重新启动 Cygwin。

如果您此更改后使用mkpasswd,它会使用新的默认外壳为被允许登录的所有用户。


1 mkpasswd 文档是这样说的:

不要使用此命令生成本地 /etc/passwd 文件,除非您确实需要。有关更多信息,请参阅 Cygwin 用户指南。

我真的在用户指南中找不到任何可靠的推理,除了提到如果您的用户和组发生变化,您必须重新生成 /etc/passwd 和 /etc/group 文件,我认为这已经足够了原因。我可以说这个过程对于新手来说有点容易出错。


gle*_*man 7

这是一个黑客:把它作为你的第一行~/.bash_profile

exec zsh
Run Code Online (Sandbox Code Playgroud)