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