Как я проверяю, какую оболочку я использую?

Я читал, тот терминал является только оболочкой, и Unix обеспечивает различные разновидности оболочек:

  • Оболочка Bourne (sh)
  • Оболочка C (csh)
  • Оболочка TC (tcsh)
  • Оболочка Korn (ksh)
  • Граница Снова окружает (колотят)

Вопросы:

  • Когда я открываю окно терминала, какая оболочка открыта по умолчанию?
  • Как я проверяю, сколько оболочек установлено?
  • Как я изменяю оболочку, используемую из моей учетной записи?
386
задан 3 May 2019 в 18:46

8 ответов

Можно ввести следующую команду в терминале для наблюдения, какую оболочку Вы используете:

echo $0

Результат посмотрит что-то подобное ниже при использовании удара (Граница Снова Shell) терминал:

-bash
460
ответ дан 7 December 2019 в 12:27

Для нахождения оболочки, Вы имеете на стандартной среде, можно проверить значение SHELL переменная среды:

echo $SHELL

Для нахождения текущего экземпляра оболочки ищите процесс (оболочка), имеющая PID текущего экземпляра оболочки.

Для нахождения PID текущего экземпляра оболочки:

echo "$"

Теперь для нахождения процесса, имеющего PID:

ps -p <PID>

Соединение его:

ps -p "$"
126
ответ дан 7 December 2019 в 12:27

Другие ответы имеют тенденцию использовать оболочку определенные функции, но мы пытаемся обнаружить, какую оболочку мы используем, таким образом, они принимают решение проблемы. Например, ни один из ответов не будет работать над рыбой.

sh -c 'ps -p $ -o ppid=' | xargs ps -o comm= -p

Вместо этого используют синтаксис $$ в вызове sh, но затем мы ищем PPID не PID. Используйте PPID для нахождения cmd.

sh -c 'ps -p $ -o ppid=' | xargs -I'{}' readlink -f '/proc/{}/exe'

спасибо за улучшение @muru

10
ответ дан 7 December 2019 в 12:27

В исходном сообщении были заданы три вопроса. Данные ответы действительно касаются первого вопроса, "Когда я открываю окно терминала, какая оболочка открыта по умолчанию?" Они также отвечают на вопрос, который НЕ задали, а именно, "Как я могу узнать, какая оболочка в настоящее время работает в терминале?" Однако насколько я вижу, что никто не ответил или на вторые или третьи вопросы, которые первоначально спрашивают, а именно, "Как я проверяю, сколько оболочек установлено?" и, "Как я изменяю оболочку, используемую из моей учетной записи?"

  • Для ответа, "Как я проверяю, сколько оболочек установлено?" следующая команда перечислит все доступные оболочки:

кошка/etc/shells

, Например, на стандартной установке Ubuntu 18.10 это дает:

#/etc/shells: допустимые оболочки входа в систему

/bin/sh

/bin/dash

/bin/bash

/bin/rbash

Однако по умолчанию sh является символьной ссылкой на тире, в то время как rbash связывается для избиения с опцией-r ("ограниченный удар"), таким образом, существует на самом деле только две оболочки, не четыре, как вышеупомянутый список предлагает. Следующая команда покажет Вам, является ли какая-либо из перечисленных оболочек на самом деле символьными ссылками, и раз так где они связываются с: ls-l / мусорное ведро

  • Теперь для вопроса, "Как я изменяю оболочку, используемую из моей учетной записи?" Принятие этого означает, "Как я постоянно изменяю оболочку по умолчанию, которую будет использовать терминал", существует ответ в https://wiki.ubuntu.com/ChangingShells#Changing_your_login_shell_which_is_permanent
4
ответ дан 7 December 2019 в 12:27

В одном из серверов я соединяюсь с, оболочка входа в систему /bin/sh, который является символьной ссылкой на /bin/bash

, Большинство ответов здесь даст sh, который заставил бы OP полагать, что это - Оболочка Bourne и не удар GNU, кроме этот , который дает /bin/bash

Другая опция, которая работает на этот случай:

$ echo $SHELL
/bin/sh

$ ls -l /bin/sh
lrwxrwxrwx 1 root root 4 May 31 16:15 /bin/sh -> bash

$ /bin/sh --help
GNU bash, version 4.2.10(1)
Usage:  /bin/sh [GNU long option] [option] ...
        /bin/sh [GNU long option] [option] script-file ...
0
ответ дан 7 December 2019 в 12:27

Для знания, который является оболочкой по умолчанию для пользователя можно работать:

echo "$SHELL"

Например, при использовании Bash, необходимо получить следующий вывод:

/bin/bash

Если бы Вы не изменили конфигурации, то это должен быть Bash начиная с Bash, это - оболочка по умолчанию на Ubuntu.

8
ответ дан 7 December 2019 в 12:27

$SHELL дает Вам оболочку по умолчанию. $0 дает Вам текущую оболочку.

Например: у Меня есть удар как моя оболочка по умолчанию, которую я использую для своего Терминального Приложения. Но для моего iTerm2 приложения, я использую команду, когда окно открывается: /bin/ksh.

Так мой $0 дает мне /bin/ksh на iTerm2. $SHELL дает мне /bin/bash на iTerm2. $0,$SHELL дает мне /bin/bash на Терминале

27
ответ дан 7 December 2019 в 12:27

Чтобы ответить на ваш третий вопрос: «Как изменить оболочку, используемую в моей учетной записи?», ответ заключается в использовании chsh.

Есть два режима:

  • интерактивный и;
  • неинтерактивный.

От Изменение оболочек - Изменение оболочки входа в систему, которая является постоянной, и немного перефразируя:

Вы будете использовать программу под названием chsh. Есть интерактивный метод. и неинтерактивный метод. Введите в терминал следующее:

ИНТЕРАКТИВНЫЙ МЕТОД

$ chsh

В результате открывается короткий диалог, в котором пользователю сначала предлагается ввести их пароль, а затем полный путь к желаемой новой оболочке.

Следует проявлять осторожность при изменении оболочки по умолчанию, потому что можно сделать ошибку, что только пользователь root (т.е. системный администратор) может ремонтировать (хотя для квалифицированного пользователю восстановить его на домашней системе). В частности, важно сначала временно протестируйте оболочку в текущем сеансе, а затем убедитесь, что правильное имя оболочки вводится при создании постоянное изменение.

НЕИНТЕРАКТИВНЫЙ МЕТОД

В качестве примера я снова буду использовать csh.

$ chsh -s /bin/csh

-s устанавливает его для вас без необходимости заходить в редактор, чтобы сделать Это.

После успешного выполнения echo $SHELL все равно будет говорить что вы в той же оболочке, что и раньше. Однако вам необходимо выйти из системы и обратно, чтобы изменения вступили в силу. Теперь выполните echo $SHELL. Ты должен увидеть, что он показывает новую оболочку.

1
ответ дан 29 January 2021 в 12:08

Другие вопросы по тегам:

Похожие вопросы: