Я читал, что терминал - это не что иное, как оболочка, а Unix предоставляет различные варианты оболочек:
- Оболочка Борна (ш)
- C оболочка (csh)
- TC shell (tcsh)
- Скорлупа корн (кш)
- Bourne Again shell (Баш)
Вопросов:
- Когда я открываю окно терминала, какая оболочка открывается по умолчанию?
- Как проверить, сколько снарядов установлено?
- Как изменить оболочку, использованную в моей учетной записи?
command-line
LearNer969
источник
источник
Ответы:
Вы можете ввести следующую команду в своем терминале, чтобы увидеть, какую оболочку вы используете:
Результат будет выглядеть примерно так, как показано ниже, если вы используете терминал bash ( Bourne Again Shell ):
источник
0
переменная окружения?csh
.% echo $0 No file for $0.
, но это работает дляtcsh
bash
какsh
echo $0
,ls -l `which <name>`
чтобы увидеть , если он является символической ссылкой на другой двоичный файл оболочка.Чтобы найти оболочку, установленную в среде по умолчанию, вы можете проверить значение
SHELL
переменной среды:Чтобы найти текущий экземпляр оболочки, найдите процесс (оболочку), имеющий PID текущего экземпляра оболочки.
Чтобы найти PID текущего экземпляра оболочки:
Теперь, чтобы найти процесс, имеющий PID:
Собираем это вместе:
источник
echo $SHELL
дал мне/bin/csh
иps -p $$
дал мне22673 pts/1 00:00:00 bash
. Кингмило объяснил (выше), почему они не одинаковы.$SHELL
дает вам оболочку по умолчанию.$0
дает вам текущую оболочку.Например: у меня bash в качестве оболочки по умолчанию, которую я использую для своего приложения терминала. Но для моего приложения iTerm2, я использую команду , как открывается окно:
/bin/ksh
.Так что мой
$0
дает мне/bin/ksh
на iTerm2.$SHELL
дает мне/bin/bash
на iTerm2.$0
,$SHELL
Дает мне/bin/bash
на терминалеисточник
bash
в терминале. Чтобы переключиться обратно на ЗШ, типаzsh
Чтобы узнать, какая оболочка по умолчанию для вашего пользователя, вы можете запустить:
Например, если вы используете Bash, вы должны получить следующий вывод:
Если вы не меняли конфигурацию, это должен быть Bash, поскольку Bash это оболочка по умолчанию в Ubuntu.
источник
/bin/sh
моем ответе нет упоминаний$$
Переменная фактически определяется POSIX и будет работать на подавляющем большинстве оболочек. Рыба решила не следовать стандарту здесь, поэтому я думаю, что будет справедливо игнорировать его. Я могу подтвердить, что$$
работает как положено в sh, dash, bash, zsh, ksh, ash, tcsh и csh. На самом деле, в верхней части головы я не могу думать ни о какой другой раковине, кроме рыбы, где она не работает.Другие ответы, как правило, используют специфические функции оболочки, но мы пытаемся выяснить, какую оболочку мы используем, поэтому они принимают решение проблемы. Например, ни один из ответов не будет работать на рыбу.
Вместо этого используйте синтаксис $$ в вызове sh, но тогда мы ищем PPID, а не PID. Используйте PPID, чтобы найти cmd.
Спасибо за улучшение @muru
источник
ppid=
/,cmd=
чтобы опустить заголовки (и так далееtail -1
), и рассмотреть/proc/.../exe
возможность посмотреть, какой файл запускается (посколькуcmd
вывод может быть обработан любым, кто запускал оболочку).Оригинальный пост задал три вопроса. Полученные ответы охватывают первый вопрос: «Когда я открываю окно терминала, какая оболочка открывается по умолчанию?» Они также отвечают на вопрос, который НЕ был задан, а именно: «Как я могу узнать, какая оболочка в настоящее время работает в терминале?» Однако, насколько я вижу, никто не ответил ни на второй, ни на третий первоначально заданный вопрос, а именно: «Как проверить, сколько оболочек установлено?». и "Как мне изменить оболочку, использованную в моей учетной записи?"
кошка / etc / shells
Например, при установке Ubuntu 18.10 по умолчанию это дает:
# / etc / shells: допустимые логины
/ Бен / ш
/ Бен / тире
/ Бен / Баш
/ Бен / rbash
Однако по умолчанию sh является символической ссылкой на dash, в то время как rbash ссылается на bash с параметром -r («limited bash»), поэтому на самом деле существует только две оболочки, а не четыре, как предлагает приведенный выше список. Следующая команда покажет вам, являются ли какие-либо из перечисленных оболочек фактически символическими ссылками, и если да, то где они ссылаются: ls -l / bin
источник