ракушка это интерпретатор командной строки, который переводит команды, введенные пользователем, в действия, которые должны выполняться операционной системой. Оболочка может быть запущена интерактивным способом (где пользователь может вводить и выполнять команды) или неинтерактивным способом (разветвленным сценарием или программой, такой как кронтаб, и т.д.).
Интерактивные оболочки запускаются в эмуляторе терминала, который относится к приложениям с графическим интерфейсом как гном-терминал, xtermи т. д., или в пределах TTY, который относится к виртуальной текстовой консоли. TTY доступны с помощью комбинации клавиш Ctrl Альт F1-9. В настольных дистрибутивах Linux среда рабочего стола работает в одном из этих TTY.
Использованная литература:
Независимо от того, эмулятор терминала это или TTY, вы можете делать то же самое с работающей внутри оболочкой.
Оболочка пользователя по умолчанию в Ubuntu: Баш. Существует файл инициализации с именем .bashrc
который находится в домашнем каталоге пользователя. Этот файл (наряду с некоторыми другими файлами инициализации системы, такими как /etc/bash.bashrc
) является источник когда пользователь открывает новую интерактивную оболочку. Таким образом создается среда пользователя по умолчанию.
Буквально по источникам .bashrc
некоторые переменные среды получают определенные значения. Такие переменные окружения:
$ПУТЬ
который содержит разделенные столбцами системные пути, по которым можно найти исполняемые файлы,
$PS1
который определяет как выглядит ваша подсказка, например: пользователь@хост:/текущий/каталог$,
$ЯЗЫК
который устанавливает локаль по умолчанию, или $LC_ALL
который переопределяет все настройки локали (источник этого объяснения, подробнее см. местонахождение человека
).
Поэтому, если вы хотите навсегда изменить какую-либо переменную среды (в пользовательской оболочке Bash), вы можете изменить (или установить) ее значение в пределах .bashrc
. В противном случае изменение будет действительным только для текущего экземпляра оболочки.
Например, откройте новый терминал и введите PS1='prompt_changed->'
и ваше приглашение будет изменено на эту строку. Затем оставьте это окно терминала открытым и откройте новый терминал — вы увидите, что это изменение не применяется там. Чтобы восстановить первый терминал, вы можете вручную получить .bashrc
файл по команде . ~/.bashrc
.
Когда вы используете экспорт
командой, вы экспортируете переменную в подоболочки которые разветвляются из текущей оболочки (дочерние оболочки), а не в другие (родственные) оболочки, созданные родительскими процессами текущей оболочки.Вот пример:
user@host:~$ VAR='Привет!' # Определите переменную с именем VAR
user@host:~$ echo $VAR # Вывод значения переменной
Привет!
user@host:~$ export VAR # Экспорт переменной
user@host:~$ bash # Создать новую оболочку bash
user@host:~$ echo $VAR # Вывод значения экспортируемой переменной
Привет!
user@host:~$ exit # Выход в родительскую оболочку
user@host:~$ sh # Разветвить новую оболочку sh (тире)
$ echo $VAR # Вывести значение экспортируемой переменной
Привет!
Команда окружение
используется для изменения среды выполнения команды или скрипта. Вот несколько строк из человек окружение
:
окружение
- установить среду для вызова команды. окружение
утилита должна получить текущую среду, изменить
его в соответствии с его аргументами, затем вызовите утилиту, названную
служебный операнд с измененной средой.
-я
Вызвать утилиту именно с той средой, которая указана в аргументах; унаследованная среда должна полностью игнорироваться.
Следующая команда: env -i PATH=/mybin mygrep xyz мой файл
вызывает команду мойгреп
с новым ДОРОЖКА
value как единственная запись в его окружении. В таком случае, ДОРОЖКА
используется для обнаружения мойгреп
, который затем должен находиться в /mybin
.
окружение
часто используется в начале скриптов (внутри так называемого шебанга) для повышения их переносимости. Вот две темы, которые охватывают это использование:
При запуске без аргументов окружение
Команда выводит список переменных среды.
Еще раз, .bashrc
файл в домашнем каталоге настраивает функции оболочки, такие как создание или изменение переменных и псевдонимов, а также определение функций.
Например, давайте определим следующую функцию в нижней части .bashrc
файл.
hello() { echo "Привет, ${USER^}!"; }
После сохранения файла вы можете получить его или открыть новый экземпляр терминала и ввести Привет
.
spas@host:~$ привет
Привет, Спас!
Итак, мы видим, что эта функция (или переменная, или псевдоним) доступна в текущей оболочке. На этом этапе называется местный функция (или переменная, или псевдоним), поэтому, если мы проверим среду с помощью окружение | привет привет
нашей функции там не будет.
Локальные переменные существуют только в текущей оболочке и не могут влиять на другие команды или приложения.
После определения функции (переменной, псевдонима) в .bashrc
мы можем экспортировать его, чтобы сделать его доступным для вспомогательных оболочек (команд или сценариев), разветвленных из текущей оболочки - таким образом, он становится Глобальный или же среда функция (переменная, псевдоним).
hello() { echo "Привет, ${USER^}!"; }
экспорт -f привет
spas@host:~$ source ~/.bashrc # в bash 'source' является синопсисом '.'
spas@host:~$ env | grep 'hello' # анализируем 'hello' в выводе 'env'
BASH_FUNC_hello%%=() { echo "Привет, ${USER^}!"
spas@host:~$ bash -c 'hello' # разветвить неинтерактивную подоболочку
Привет, Спас! # и выполняем функцию внутри
Имейте в виду, что неинтерактивные оболочки в большинстве случаев не используют по умолчанию файлы инициализации, как .bashrc
, поэтому их среда ограничена, чем среда интерактивных оболочек.
Например, когда вы разрабатываете сценарий, который будет использоваться кронтаб вы должны использовать полные пути к командам или убедиться, что у него есть необходимая среда.