我正在尝试将 fish 设置为我的默认 shell。它通过 apt-get 安装在系统上,并列在/etc/shells
:
> which fish
/usr/bin/fish
> grep fish /etc/shells
/usr/bin/fish
我曾经chsh
从 Bash 切换到 fish:
> chsh -s /usr/bin/fish
我的默认 shell 已经更改为/etc/passwd
:
> grep "myusername" /etc/passwd
myusername:x:1000:1000:Oh Spite,,,:/home/myusername:/usr/bin/fish
太棒了。然后我退出并重新启动。登录 shell(例如虚拟 TTY 和 SSH)现在启动 fish。
但是,当我使用 gnome-terminal 或 urxvt 启动终端时,会启动一个 bash 会话。此外,变量SHELL
仍然设置为/bin/bash
。
有趣的是,《终结者》做使用 fish 作为默认 shell。但即使在该会话SHELL
设置为 的情况下也是如此/bin/bash
。如果我从 Terminator 启动 urxvt,urxvt 会启动 Bash 会话。
我还需要做什么才能将我的默认 shell 更改为 fish?
(也可以看看这个问题,但这不是重复的,因为我已经遵循了这些说明和重启过。 现在已经重启过很多次了。
答案1
在 Unity 等桌面环境内启动的大多数终端(至少是 gnome-terminal、urxvt 和 XTerm)都会使用环境SHELL
变量在启动时选择 shell。
SHELL
应自动设置为 中列出的默认 shell /etc/passwd
,但登录时可以覆盖该变量。请确保您没有在SHELL=/bin/bash
会影响整个桌面会话的文件中设置或类似内容。此类文件包括:
~/.profile
~/.pam_environment
/etc/environment
- 也许还有一些 Ubuntu 用户不常编辑的文件,例如
/etc/profile
此外,如果任何脚本(例如~/.bashrc
或)~/.bash_profile
被其他启动文件调用并且有一行export SHELL=/bin/bash
,那么这也会影响整个桌面会话。
我知道这是可以接受/鼓励的,但我仍然讨厌回答自己的问题。不过,这可能对将来的某些人有用。感谢@heemayl 和@muru 帮助我调查。