28

我已经使用 Cygwin 有一段时间了。我现在想从 bash 切换到 fish。每个人都说你应该使用chsh -s /usr/bin/fish,但由于某种原因,chsh它对我不起作用。尝试修改我的Cygwin.bat文件也不起作用,更改我的/etc/passwd文件也不起作用。

我真的不明白发生了什么事。有人可以帮我吗?

4

9 回答 9

38

尝试编辑 /etc/nsswitch.conf 而不是 /etc/passwd

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

db_shell: /usr/bin/fish

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

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


参考

1mkpasswd文档是这样说的:

不要使用此命令生成本地 /etc/passwd 文件,除非你真的需要一个。有关详细信息,请参阅 Cygwin 用户指南。

我真的在用户指南中找不到任何可靠的理由,除了提到如果您的用户和组发生更改,您必须重新生成/etc/passwdand/etc/group文件,我认为这是一个足够体面的理由。我可以说这个过程对于新手来说有点容易出错。

于 2016-06-14T14:40:32.450 回答
19

我偶然遇到了同样的问题,现在我为您提供我的解决方案。

0- 打开cygwinmintty.exe

1- 手动构建 passwd 文件 ( mkpasswd)

$mkpasswd > /etc/passwd

2-更改密码文件中的默认外壳

$vim /etc/passwd
user:*:1976XX:1971XX:U-user\user,S-1-5-21-XXXX:/home/user:/bin/fish

3-重启mintty.exe

于 2016-01-08T18:03:48.273 回答
7

SuperUser上有一个更简单的答案。在 Windows 中设置 SHELL 环境变量。将其设置为您喜欢的 shell(例如/bin/tcsh),新启动的 shell 应该使用它。

设置环境变量:

  1. 转到“系统”控制面板(右键单击开始菜单并选择“系统”)
  2. 点击左侧栏中的“高级系统设置”
  3. 在弹出的“系统属性”窗口中,单击“环境变量...”按钮
  4. 在“用户变量”或“系统变量”框中(取决于您希望更改仅影响您自己还是所有用户),单击“新建...”按钮。
  5. 在“变量名”框中键入“SHELL”,在“变量值”框中键入您首选的 shell 的路径(相对于 Cygwin 文件系统)。
  6. 在三个打开的​​窗口上单击确定以保存您的更改。
于 2017-04-13T19:50:42.730 回答
4

我不确定这个解决方案有多“合适”,但我只是添加/usr/bin/zsh; exit到我的.bashrc文件底部。您可以替换/usr/bin/zsh您选择的 shell 的路径。到目前为止,它似乎工作得很好。

于 2016-02-12T19:34:56.723 回答
3

我想评论接受的答案,但没有足够的代表。

关于这个方法

$ mkpasswd > /etc/passwd

虽然这可以生成 /etc/passwd 文件,但您可能正在为自己安装 cygwin,如果您的计算机属于域,mkpasswd 可能会用完并尝试使用整个域用户列表。在这种情况下,我有一个 500MB+ /etc/passwd 文件,而 cygwin 甚至在我删除文件之前都不会启动。

我强烈建议,如果使用 mkpasswd 路由来使用-c交换机,那么它只会为您自己添加一个条目。

$ mkpasswd -c > /etc/passwd

在具有共享 cygwin 服务的机器上(假设您有写权限)

$ mkpasswd -c >> /etc/passwd

于 2018-10-25T01:42:15.817 回答
3

如果您通过ConEmu运行 Cygwin,我发现最简单的方法是替换命令行来运行 fish 而不是默认 shell(Settings->Startup->Tasks):( ""c:\cygwin64\bin\fish.exe" --login -i"请相应地更改您的 cygwin 文件夹的路径)

于 2017-04-23T09:01:58.177 回答
1

我试图将 cygwin 中的默认 shell 更改为 zsh,我发现这里的部分答案很有帮助,但没有一个给出完整的解决方案。我发现的最佳说明是在 Robby Russel 的 oh my zsh github repo 中的“安装 zsh”说明中,您可以在此处找到

在页面的顶部,它有安装 zsh 的一般说明,然后是许多不同平台的具体说明。您可以向下滚动到 Cygwin 部分并按照以下步骤操作:

“更改默认 shell 的最简单方法是设置您的 SHELL 用户环境变量。搜索“Edit Environment variables for your account”以打开环境变量窗口,创建一个名为“SHELL”的新变量并为其赋值“ /usr/bin/zsh/"."

(在 Windows 7 上:按 Windows 键。开始输入“环境”。当它出现时,选择“为您的帐户编辑环境变量”并按上述说明添加新变量。)

完成此操作后,我关闭并重新打开我的 Cygwin shell 窗口并测试它是否与 echo $SHELL 一起使用。预期结果:/bin/zsh 或类似。

希望这可以帮助!

于 2018-12-16T03:56:09.727 回答
0

转到c:\cygwinc:\cygwin64(无论您的 cygwin 主目录是什么)并编辑cygwin.bat. 代替

bash --login -i

写,例如,

rem bash --login -i
tcsh -l
于 2018-07-10T13:40:22.500 回答
0

一种简单的方法是在 .bashrc 文件末尾调用 tcsh

#     x2=$(dirs +${cnt} 2>/dev/null)
#     [[ $? -ne 0 ]] && return 0
#     [[ ${x2:0:1} == '~' ]] && x2="${HOME}${x2:1}"
#     if [[ "${x2}" == "${the_new_dir}" ]]; then
#       popd -n +$cnt 2>/dev/null 1>/dev/null
#       cnt=cnt-1
#     fi
#   done
#
#   return 0
# }
#
# alias cd=cd_func
tcsh
alias g=gvim
source ~/.cshrc
source ~/.aliases
于 2020-02-02T08:10:03.460 回答