通过 chsh 更改用户 shell 与编辑 .bashrc 之间有实际区别吗?

通过 chsh 更改用户 shell 与编辑 .bashrc 之间有实际区别吗?

我总是使用chsh或来设置我的 shell。我最近和某人交谈过,他通过向(或者可能是机器上默认 shell 的 rc 文件)sudo vim /etc/passwd添加以下内容来设置他的 shell :。~/.bashrcSHELL=/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),那么您将陷入无限循环。

相关内容