Що таке оболонка за замовчуванням для терміналу?


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

Я думаю, що це особисто погана команда - ніщо з цього навіть не вимагає кореня. Якби це було , краще було б записати як sudo netstat -an | grep LISTEN | grep -v ^unix. Я не бачу причин вкладати це в баштину підзаглушку.
Цезій

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 $$

наприклад, ви побачите, що оболонка є ударом у прикладі виводу

  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.