Вопрос или проблема
Я установил ZSH на своей виртуальной машине, скомпилировав его из исходного кода. Местоположение ZSH — /usr/local/bin/zsh
. Когда я выполняю chsh -s /usr/local/bin/zsh
, выводится сообщение chsh: /usr/local/bin/zsh is an invalid shell
. Я также пробовал это с sudo. Как я могу это изменить?
Добавьте zsh в /etc/shells
:
command -v zsh | sudo tee -a /etc/shells
Теперь вы можете использовать chsh, чтобы установить zsh в качестве оболочки:
sudo chsh -s "$(command -v zsh)" "${USER}"
См. эту документацию: Изменение вашей входной оболочки
Вам нужно добавить /usr/local/bin/zsh
в /etc/shells
.
Сначала проверьте, указана ли zsh
в качестве допустимой оболочки с помощью
cat /etc/shells
Если zsh
не указана, установите ее. Например, если вы используете apt
sudo apt-get install zsh
Снова выполните шаг 1 и посмотрите путь к zsh
. В моем случае были указаны как /usr/bin/zsh
, так и /usr/zsh
.
Как упомянул @Stéphane Chazelas в комментарии, если вы хотите скомпилировать и установить оболочку с нуля, обязательно добавьте путь в /etc/shells
.
Измените оболочку с помощью
chsh -s /usr/bin/zsh
Из man page:
-s, --shell SHELL
Название новой входной оболочки пользователя. Установка этого поля в пустое значение заставляет систему выбрать оболочку по умолчанию.
Выйдите из системы и войдите снова.
Я использую Ubuntu 21 на ARM64 (Raspberry Pi 4), и здесь есть больше проблем, чем раскрывают ответы. Я установил zsh и ksh и попытался изменить свою оболочку на zsh и ksh, используя chsh, и в обоих случаях я получил сообщение “invalid shell”. Я проверил /etc/shells, и этот файл содержал обе оболочки. Я пробовал команду chsh, указывая просто названия оболочек (zsh, ksh) и также полные пути, указанные в /etc/shells. Мне не удалось добиться правильной работы. Наконец, из-за разочарования я просто изменил свою оболочку в файле /etc/passwd, и это сработало. Позже я выяснил, что есть два разных способа вызова chsh. То, что я пытался сделать: chsh -s, что выдавало сообщение об ошибке. Но chsh также может быть вызвано простым вводом chsh. Это открывает интерактивную сессию:
$ chsh
Password:
Changing the login shell for tom
Enter the new value, or press ENTER for the default
Login Shell [/bin/ksh93]: /usr/bin/zsh
Когда я делаю это таким образом, это работает. Однако ввод команды как chsh -s по-прежнему не работает.
Ответ или решение
Для опытного IT-специалиста важной задачей иногда становится настройка окружения так, чтобы его инструменты работали точно и эффективно. Один из таких случаев — это смена стандартной оболочки (shell) на Zsh. Давайте разберем, как решается проблема, когда команда chsh
отображает сообщение об "невалидной оболочке".
Пошаговая инструкция по смене оболочки на Zsh:
-
Проверка установленной Zsh и ее пути:
- Обычно, если Zsh была установлена из исходного кода, она размещается в
/usr/local/bin/zsh
. Чтобы убедиться, что Zsh действительно там, выполните:command -v zsh
- Если Zsh не отображается, возможно, она не была установлена корректно или не добавлена в переменные среды PATH.
- Обычно, если Zsh была установлена из исходного кода, она размещается в
-
Проверка включения Zsh в список допустимых оболочек:
- Откройте файл
/etc/shells
и проверьте, присутствует ли путь/usr/local/bin/zsh
. - Если Zsh отсутствует, добавьте ее с помощью следующей команды:
echo "/usr/local/bin/zsh" | sudo tee -a /etc/shells
- Откройте файл
-
Смена оболочки с использованием команды
chsh
:- После того, как Zsh добавлена в
/etc/shells
, смените оболочку:chsh -s /usr/local/bin/zsh
- Альтернативно, можете использовать интерактивную сессию
chsh
, где проще избежать ошибок:chsh
Затем следуйте инструкциям, вводя
/usr/local/bin/zsh
в соответствующее поле.
- После того, как Zsh добавлена в
-
Перепроверка и исправление в случае проблем:
- Если смена все равно не удалась, проверьте права доступа к
/etc/passwd
или попробуйте изменить записи непосредственно в этом файле вручную, но будьте осторожны, чтобы не повредить файл.
- Если смена все равно не удалась, проверьте права доступа к
-
Перезагрузка системы:
- После внесения изменений обязательно выйдите из системы и повторно войдите, чтобы изменения вступили в силу.
Заключение:
Каждый шаг имеет свое значение и помогает устранить потенциальные ошибки на пути к успешной замене оболочки на Zsh. Это выгодно улучшает производительность и позволяет работать в более удобном и функциональном окружении. Поддерживайте свою систему обновлённой и внимательно следите за интеграцией новых компонентов.