Есть ли практическая разница между изменением оболочки пользователя с помощью chsh и редактированием .bashrc?

1

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

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

Джонс
источник

Ответы:

6

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

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

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

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

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

grawity
источник