我要将 root 的默认 shell 从 bash 更改为 fish。据我所知,fish 不是 POSIX 标准 shell。另一方面,也许内核或系统中的其他东西与 POSIX 标准有关,因此不建议将 root 的默认 shell 设置为非 POSIX shell,因为这可能会导致操作系统的某些部分出现问题。我看到有人在某些主题上建议其他人不要将 root 用户的默认 shell 设置为非 POSIX shell!对吗?
我是否应该将 root 的默认 shell 更改为非 POSIX shell?(如果您能解释一下原因我会很高兴,我是类 Unix 世界的新手!)
答案1
将 fish 设为默认登录 shell 意味着SHELL
环境变量将设置为 fish。许多程序(例如 vim、tmux)都使用它作为 shell 来执行 shell 命令,除非你明确将它们配置为使用其他 shell(例如,/bin/sh)。由于这些 shell 命令很可能包含 POSIX shell 语法,因此 fish 无法正确执行这些命令。这意味着您更有可能遇到看似随机、令人沮丧的问题。
您可以将 fish 设置为默认登录 shell。我在我的两台主计算机上都这样做了。但我是一位经验丰富的 UNIX 用户,我意识到这可能会导致潜在的问题。我也知道如何解决这些问题。例如,通过添加set shell=/bin/sh
到我的 vimrc 配置文件中。如果您缺乏经验或只是不想处理所需的额外配置,最好将您的登录 shell 设置为 bash 或其他 POSIX shell。然后在交互模式下从该 shell 启动 fish。这也更安全,因为您更有可能搞砸 fish 配置,从而无法启动交互式 fish 会话。如果您将 fish 设置为默认登录 shell,那么您将无法登录。
底线是,如果您是缺乏经验的 UNIX CLI 用户或刚接触 fish,请不要将其设置为您的默认 shell。如果您是经验丰富的 UNIX CLI 用户,并且已经使用 fish 几个星期,并且确信您可以正确配置它,请随意将其设置为您的默认 shell。