与Cygwin的zsh


Answers:


45

除非您将cygwin用作多用户环境(在这种情况下chsh,请像在标准环境中那样使用)。

否则,你只需要改变cygwin.bat运行zsh -l -i,而不是bash --login -i,它会运行一个登录shell。  

当然,如果要在启动时运行多个Shell,只需创建一组.bat文件即可加载不同的Shell。(shkshcshfish等等)

更新中...

我觉得我应该更新它,以提供有关这样做的信息,chsh但在Unix端仍要这样做。编辑/etc/passwd文件并替换的出现/bin/bash/bin/zsh。(这实际上是chsh可以执行的操作,但是通过这种方式,您可以一次性为所有用户执行此操作。)


15
缺省情况下,cygwin中不再有/ etc / passwd,并且不再支持chsh。此答案无济于事(2014年4月10日)。
杰夫·斯尼德

回家@THESORcerER,你喝醉了
ocodo

2
@JeffSnider运行mkpasswd -l -p "$(cygpath -H)" > /etc/passwd并编辑新创建的/etc/passwd文件
BrunoLM '16

17

如果我没看错您的问题,那么您正在寻找的是除杂物 供应之外的其他东西 (理所当然,这本身就很酷)。

当前版本的Cygwin没有 / etc / passwd 文件,而我正在使用的系统无法控制域数据库中的Windows帐户信息。因此, 不再支持chsh

我还发现,bash不会硬编码到 startxwin 脚本中,也不会硬编码在任何.bat文件中。原来,您根本不需要摆弄.bat文件。

搜索如何更改外壳,我发现了有关mkpasswd的一些建议

我将其添加到混合中。

手册页说:

SYNOPSIS
   mkpasswd [OPTIONS]...

OPTIONS
   Don't use this command to generate a local /etc/passwd file, unless you
   really need one.  See the Cygwin User's Guide for more information.

   -c,--current
          Print current user.

  DESCRIPTION
        The   mkpasswd  program can be used to create a        /etc/passwd
   file.  Cygwin doesn't need  this  file,        because  it  reads  user
   information  from  the Windows account databases,       but you can add
   an  /etc/passwd file, for instance       if your machine is often  dis‐
   connected from its domain controller.

        Note  that this information is static, in contrast to the informa‐
   tion       automatically gathered by Cygwin from  the  Windows  account
   databases.  If        you  change  the user information on your system,
   you'll need to regenerate       the passwd file for it to have the  new
   information.


        For  very  simple needs, an entry for the current user can be cre
   ated       by using the option  -c.

(我不知道为什么间距这么“小”……)

然后,我使用以下命令:

mkpasswd -c | sed -e'sX / bashX / zshX'| tee -a / etc / passwd

下次打开Cygwin Terminal时,它将直接进入zsh

我认为,这就是您所要求的。


17

我只是将bincygwin目录中的目录添加到Windows路径环境变量中,然后创建一个快捷方式:

mintty.exe -i /Cygwin-Terminal.ico /bin/zsh --login

或仅将默认的cygwin开始菜单快捷方式更改为相同。


2
我不得不使用/bin/zsh代替zsh
kraiz

1
the bin directory in the cygwin directory to my Windows Path Environment Variable对我来说没有任何变化也可以工作
ruslo 2015年

i没有必要的,因为这将是一个登录shell,而不是interactive
蒂莫

6

我对堆栈溢出的回答中复制:


而不是创建一个passwd文件,其中的Cygwin 建议对1,你可以编辑/etc/nsswitch.conf中。添加或编辑以下行:

db_shell:/ usr / bin / zsh

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

如果在此更改后确实使用了mkpasswd,它将对所有允许登录的用户使用新的默认外壳程序。


1 mkpasswd文档说:

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

除了在用户指南和组中进行更改,您必须重新生成/ etc / passwd和/ etc / group文件之外,我在用户指南中找不到任何可靠的推论,我想这已经足够了原因。我可以说这个过程对于新手来说很容易出错。


这应标记为已接受。
Arda

4

假设您有兴趣更改mintty / Cygwin Terminal中使用的shell,它将首先检查SHELL环境变量,然后检查(现在不存在)passwd文件,然后退回到/ bin / sh,这似乎是在做默认。

我能够将Windows中的SHELL环境变量设置为,/usr/bin/zsh并且无需任何其他更改即可工作。我只是为Windows用户而不是全局用户更改了它。

设置环境变量可能因Windows的不同版本而异。尝试在Windows控制面板中搜索“环境”。对我而言,在Windows 7下是控制面板→系统→高级系统设置,它会弹出系统属性控制面板/对话框,然后是高级选项卡,然后是环境变量按钮,这会弹出环境变量对话框,然后创建任命了新的用户变量SHELL与价值/usr/bin/zsh。然后确定退出所有步骤并开始新的薄荷味。


现在,应该大汗upvoted!最简单的方法,不会弄乱Cygwin的内部阴谋,并且很容易逆转!
pepoluan

1

只是以为我会添加这个答案,以防它对正在寻找它的人有所帮助。如果使用chere(在任何文件夹的右键单击上下文菜单中添加“此处提示提示”选项),则可以使用以下命令将其设置为zsh(“此处提示提示”):

chere -i -t mintty -s zsh

0

如果要在IDE Intellij中使用Cygwin外壳,请在settings / tools / terminal中使用以下设置

c:\cygwin\bin\zsh.exe -l -i

这会将cygwin外壳嵌入intellij中,而不是生成新窗口

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.