1

Я всегда устанавливал свою оболочку, используя chsh или sudo vim /etc/passwd . Недавно я поговорил с кем-то, кто вместо этого устанавливает свою оболочку, добавив следующее в ~/.bashrc (или, вероятно, в файл rc любой оболочки по умолчанию на машине): SHELL=/bin/zsh exec /bin/zsh --login ,

Есть ли практическая разница между этими двумя подходами?

1 ответ1

6

Последний метод не меняет вашу оболочку - он просто указывает старой оболочке запустить новую.

В дополнение к тому, что он почти вдвое медленнее (поскольку вы все еще запускаете bash каждый раз), это может привести к неожиданным взаимодействиям:

  • В некоторых системах командные команды, такие как ssh myhost "ps -ef" будут исходить из ~/.bashrc перед выполнением команды, но ваша строка "exec zsh" забыла об этом учесть и запускает интерактивную оболочку, несмотря ни на что. Если это произойдет, все пакетное использование SSH (включая SFTP) будет прервано.

  • В других системах такие пакетные команды не получают ~/.bashrc (или, часто, они делают, но ~/.bashrc возвращается рано, если работает в пакетном режиме) - так что ваш "exec zsh" никогда даже не достигается. Так что попытка вашего друга сменить оболочку менее эффективна.

  • Если вы забудете об этом изменении и попытаетесь отредактировать ~/.zshrc, чтобы сделать обратное (то есть запустить bash), вы получите бесконечный цикл.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .