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

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

  • Bourne shell (sh)
  • C shell (csh)
  • TC shell (tcsh)
  • Korn shell (ksh)
  • Bourne Again shell (bash)

Вопросы:

  • Когда я открываю окно терминала, какая оболочка открывается по умолчанию?
  • Как проверить количество установленных оболочек?
  • Как изменить оболочку, используемую в моей учетной записи?
223 голоса | спросил goutham 28 FebruaryEurope/MoscowbSat, 28 Feb 2015 06:58:20 +0300000000amSat, 28 Feb 2015 06:58:20 +030015 2015, 06:58:20

5 ответов


275

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

echo $0

Результат будет выглядеть примерно так, как показано ниже, если вы используете терминал bash ( Bourne Again Shell ):

-bash
ответил kingmilo 28 FebruaryEurope/MoscowbSat, 28 Feb 2015 07:03:08 +0300000000amSat, 28 Feb 2015 07:03:08 +030015 2015, 07:03:08
70

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

echo $SHELL

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

Чтобы найти PID текущего экземпляра оболочки:

echo "$$"

Теперь, чтобы найти процесс с PID:

ps -p <PID>

Объединяя это:

ps -p "$$"
ответил heemayl 28 FebruaryEurope/MoscowbSat, 28 Feb 2015 07:06:26 +0300000000amSat, 28 Feb 2015 07:06:26 +030015 2015, 07:06:26
15

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

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

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

ответил nakulchawla09 18 52016vEurope/Moscow11bEurope/MoscowFri, 18 Nov 2016 14:45:48 +0300 2016, 14:45:48
5

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

 echo "$SHELL"

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

 /bin/bash

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

ответил kos 28 FebruaryEurope/MoscowbSat, 28 Feb 2015 07:02:38 +0300000000amSat, 28 Feb 2015 07:02:38 +030015 2015, 07:02:38
2

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

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

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

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

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

ответил Evan Benn 6 AMpFri, 06 Apr 2018 07:00:01 +030000Friday 2018, 07:00:01

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

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132