Что делает команда $ SHELL помимо вывода оболочки, когда я набираю ее в командной строке? - PullRequest
2 голосов
/ 22 декабря 2008

Я знаю, что это должно выводить, какую оболочку я использую, что я думаю, что делает, потому что она выводит "bash-3.2", но это не совсем так, потому что это фактически меняет мое приглашение "Баш-3.2 $". Что еще происходит? Когда я нажимаю Ctrl + D, я возвращаюсь к исходному приглашению. Это запускает оболочку bash? Я подумал, открыв окно терминала (я в Mac OS X), я открыл программу оболочки.

Я попытался в Google, но я не смог получить хорошие результаты за $ SHELL. Кроме того, как мне заставить Google включить "$" в мой поиск?

Ответы [ 4 ]

6 голосов
/ 22 декабря 2008

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

Имя программы оболочки хранится в переменной $SHELL. Выполнение просто «$SHELL» в командной строке использует значение в этой переменной, а затем интерпретирует его как команду, которая запускает новую оболочку. Когда вы выходите из этой оболочки, вы возвращаетесь к той оболочке, где она остановилась.

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

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

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


Роб Кеннеди комментирует переменную $SHLVL. Это указывает на то, насколько «глубоко» вы находитесь в оболочках. Например, когда вы входите в систему, «echo $SHLVL» печатает 1. Если вы открываете новую оболочку, та же команда печатает 2. После того, как вы выйдете из этой подоболочки и вернетесь в оболочку входа в систему, команда снова напечатает 1. Это нечто большее, чем вы просили, и его использование более эзотерическое, но это довольно интересно.

3 голосов
/ 05 апреля 2016

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

На самом деле это переменная среды, установленная процессом входа в систему для оболочки входа по умолчанию для пользователя. В системах Unix это обычно настраивается в /etc/passwd - если только не используется NIS, LDAP, Active Directory или какой-либо другой механизм аутентификации.

Из раздела POSIX 2008 по Переменные среды

SHELL

Эта переменная должна представлять путь предпочтительной команды пользователя переводчик языка.

Из раздела руководства Bash по Переменные Bash

SHELL

Полный путь к оболочке хранится в этой переменной среды. Если оно не устанавливается при запуске оболочки, Bash присваивает ей полный путь оболочка для входа текущего пользователя.

Типичное использование

Используется

  • программы с экранированием оболочки, позволяющие запускать команды оболочки из программы, например текстовые редакторы, такие как Vim.

  • Экран GNU для определения, какая оболочка должна быть запущена в качестве оболочки по умолчанию при открытии новых окон.

3 голосов
/ 22 декабря 2008

All $ SHELL - это переменная макроса или оболочки, которая содержит имя оболочки. Поэтому, когда вы печатаете

$ $SHELL

строка сразу расширяется до

$ bash-3.2

который в вашей системе является именем исполняемого файла bash. Таким образом, он запускает исполняемый файл.

Если вы хотите просто посмотреть, что внутри переменной, введите

$ echo $SHELL

, который просто копирует аргументы в стандартный вывод.

Вы также можете создавать свои собственные переменные, например,

$ FRED="My name is Fred"

после чего

$ echo $FRED

напечатает

$ echo FRED
My name is Fred.
1 голос
/ 22 декабря 2008

$ SHELL сама по себе не является командой; это переменная, хранящая имя оболочки, которую вы сейчас используете

попробуйте echo $SHELL в командной строке

вы получите что-то вроде этого

/bin/bash

так что вы действительно делаете, когда набираете

$ SHELL

есть

/ бен / Баш

, поэтому вы получаете новую оболочку

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...