我总是通过使用chsh或来设置我的外壳sudo vim /etc/passwd。我最近与某人交谈,他通过将以下内容添加到~/.bashrc(或者可能是机器上默认 shell 的任何 rc 文件)中来设置他的 shell :SHELL=/bin/zsh exec /bin/zsh --login.
这两种方法之间有实际区别吗?
后一种方法不会改变你的 shell——它只是告诉旧的 shell 运行一个新的 shell。
除了速度几乎是原来的两倍(因为您仍然每次都启动 bash),它还可能导致一些意想不到的交互:
在某些系统中,像这样的批处理命令ssh myhost "ps -ef"会在运行命令之前提供 ~/.bashrc - 但是您的“exec zsh”行忘记了这一点,并且无论如何都会运行交互式shell。如果发生这种情况,所有 SSH(包括 SFTP)的批量使用都会被破坏。
在其他系统中,此类批处理命令不提供~/.bashrc (或者,它们经常提供,但如果以批处理模式运行, ~/.bashrc 会提前返回)——因此您的“exec zsh”甚至永远不会到达。因此,您朋友更改外壳的尝试效果较差。
如果您忘记此更改,并尝试编辑 ~/.zshrc 以执行相反的操作(即运行 bash),您将得到一个无限循环。