Общепринятое значение переменной окружения SHELL
— любимая интерактивная оболочка пользователя. Нет никаких обязательств, что он имеет какой-то конкретный синтаксис (он не обязательно должен быть похож на Борна), что он поддерживает какой-то конкретный синтаксис командной строки (такой как -c
) или что он имеет что-то для делать с оболочкой входа в систему (приложения, использующие SHELL
, обычно по умолчанию используют оболочку входа, если SHELL
не задано). Он в основном используется эмуляторами терминала в качестве программы, запускаемой по умолчанию.
Если вы входите в текстовом режиме (через текстовую консоль или через SSH), вы получаете оболочку входа, указанную в базе данных пользователей (например, /etc/passwd
). Когда вы открываете терминал в среде с графическим интерфейсом, вы получаете оболочку, указанную в переменной среды SHELL
, если эта переменная установлена. Если вам нужна одна и та же оболочка для входа в текстовый режим, либо измените оболочку входа с помощью chsh
, либо переключите оболочку входа в свою любимую оболочку с помощью exec
.
Иногда вы можете столкнуться с программой, которая использует $SHELL -c
вместо sh -c
для выполнения кода в синтаксисе sh. Но это довольно редко.Технически это разрешено POSIX, но это нарушило бы историческое использование. На практике настройка SHELL
безопасна.Моя оболочка входа в систему была установлена на /bin/sh
, а SHELL
— на /path/to/zsh
на большинстве машин около двух десятилетий.