为什么 /etc/passwd 中的默认 shell 没有由 Unity 会话中的终端启动?

为什么 /etc/passwd 中的默认 shell 没有由 Unity 会话中的终端启动?

我正在尝试将 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 帮助我调查。

答案2

要设置fish为 的默认 shell gnome-terminal,请从gnome-terminal转到 :

Edit > Profile Preferences

然后转到Title and Command标签,您将获得:

前

更改为:

后

现在,无论何时启动 的新实例gnome-terminalfish都会启动 而不是bash

相关内容