Что такое оболочка по умолчанию для терминала?


51

Допустим, я открыл терминал и ввел / выполнил некоторые команды оболочки.

Но я не вызывал явно Bash или любую другую оболочку.

Какая оболочка использовалась по умолчанию?

Ответы:


51

Тот, который указан в вашей строке /etc/passwd(это :отдельная строка, а оболочка является последней).

Например мой:

chris:x:1000:1000:Chris,,,:/home/chris:/bin/bash

Вот оно /bin/bash(Ubuntu по умолчанию)

Вы также можете использовать chsh:

$ chsh
Password: 
Changing the login shell for chris
Enter the new value, or press ENTER for the default
        Login Shell [/bin/bash]:

Это говорит мне о том, что моя оболочка есть, /bin/bashи позволяет мне ее изменить.

Наконец, echo $SHELLсделаем то же самое:

$ echo $SHELL
/bin/bash

если это bash, почему он иногда вызывается явно как sudo bash -c "netstat -an | grep LISTEN | grep -v ^ unix" ??
DrStrangeLove

Я думаю, что это плохая команда лично - ничего из этого даже не требует root. Если бы это было так , было бы лучше написать как sudo netstat -an | grep LISTEN | grep -v ^unix. Я не вижу смысла заключать это в подоболочку bash.
Цезий

2
@DrStrangeLove: если более чем одной команде в канале требуются права суперпользователя, он sudo bash -c "..."будет гарантировать, что весь канал выполняется корнем.
Кит Томпсон

Если вы не знаете, какие команды требуют root (и почему), вам не следует их запускать. В противном случае, зачем доверять любой команде / программе / скрипту больше, чем требуется. Если вы не можете commandA | sudo commandB | commandC, вы можете сделать sudo idпервый (запускает idкоманду как root, но также получает токен « использовать sudo без запроса пароля », который длится (по умолчанию) 15 минут.
waltinator

2
Если вы используете, chshто вы должны выйти и снова войти, чтобы увидеть это изменение.
Нил Трафт

17

GNU Bash - это оболочка, используемая по умолчанию в терминалах Ubuntu. Однако, когда сценарии выполняются при загрузке системы, используется тире, так как это тире / bin / sh.

Это определено в переменной окружения $ SHELL. Вы можете проверить, набрав echo $SHELLв терминале.


14

набрав следующее, вы увидите, в какой оболочке открыт терминал:

echo $SHELL

Однако, чтобы узнать, в какой оболочке вы сейчас находитесь (возможно, вы ее изменили), наберите

ps -p $$

например, вы увидите, что оболочка bash в примере вывода

  PID TTY          TIME CMD
 3500 pts/0    00:00:01 bash

Другой метод заключается в использовании

echo $0

это просто вернет имя текущей оболочки.


+1 для простотыecho $0
djthoms

Отличный ответ! Спасибо, по какой-то причине echo $ SHELL не работал (всегда использовал тот), и ваши две альтернативы работали. Спасибо!
волчий рассвет

3

По умолчанию это bash:

env | grep ^SHELL=

В большинстве случаев будет производить

SHELL=/bin/bash

Не обязательно. Если вы создаете нового пользователя с useradd, по умолчанию sh. $ useradd -D|grep SHELL SHELL=/bin/sh,
Sparhawk

+1, потому что, хотя выбранный ответ требует меньше ввода, всегда приятно иметь более одного способа что-то сделать.

2

Чтобы получить путь к файлу текущего исполняемого файла оболочки, можно использовать

readlink -f /proc/$$/exe

Некоторые возможные выходы:

  • /bin/bash
  • /usr/bin/bash
  • /usr/bin/zsh
  • /home/stan/.linuxbrew/Cellar/zsh/5.2/bin/zsh
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.