ohs*_*ite 6 command-line gnome-terminal login fish
我正在尝试将鱼设置为我的默认外壳。它通过 apt-get 安装在系统上,并列在/etc/shells:
> which fish
/usr/bin/fish
> grep fish /etc/shells
/usr/bin/fish
Run Code Online (Sandbox Code Playgroud)
我曾经chsh从 Bash 切换到 Fish:
> chsh -s /usr/bin/fish
Run Code Online (Sandbox Code Playgroud)
我的默认外壳已更改为/etc/passwd:
> grep "myusername" /etc/passwd
myusername:x:1000:1000:Oh Spite,,,:/home/myusername:/usr/bin/fish
Run Code Online (Sandbox Code Playgroud)
惊人的。然后我注销并重新启动。登录 shell(例如,虚拟 TTY 和 SSH)现在启动 fish。
然而,当我使用 gnome-terminal 或 urxvt 启动终端时,会启动一个 bash 会话。此外,该SHELL变量仍设置为/bin/bash。
有趣的是,终结者确实使用 fish 作为默认 shell。但即使在那个会话SHELL中设置为/bin/bash. 如果我从 Terminator 启动 urxvt,则 urxvt 会启动 Bash 会话。
我还需要做什么才能将我的默认 shell 更改为 fish?
(另请参阅此问题,但这不是重复的,因为我已按照这些说明进行操作并重新启动。现在很多次了。)
大多数在桌面环境(例如 Unity)中启动的终端(至少是 gnome-terminal、urxvt 和 XTerm)在启动时将使用SHELL环境变量来选择 shell。
SHELL应自动设置为 中列出的默认 shell /etc/passwd,但该变量可能会在您登录时被覆盖。请确保您没有SHELL=/bin/bash在文件中设置或类似的内容,这会影响您的整个桌面会话。此类文件包括:
~/.profile~/.pam_environment/etc/environment/etc/profile此外,如果任何脚本(例如~/.bashrc或~/.bash_profile由那些其他启动文件调用)并且有export SHELL=/bin/bash一行,这也会影响整个桌面会话。
我知道这是可以接受/鼓励的,但我仍然讨厌回答我自己的问题。尽管如此,这可能对将来的某个人有用。感谢@heemayl 和@muru 帮助我进行调查。