М. Гаррельс. Посібник з Bash. Змінні. Посібник для змінних серед Linux Linux встановити змінну оточення

Поняття параметра в оболонці bashподібно до поняття змінної у звичайних мовах програмування. Іменем (або ідентифікатором) параметра може бути слово, що складається з алфавітних символів, цифр та знаків підкреслення (тільки перший символ цього слова не може бути цифрою), а також число або один із наступних спеціальних символів: * , @ , # , ? , - (дефіс), $ , ! , 0 , _ (підкреслення).

Говорять, що параметр заданий або встановлений, якщо йому надано значення. Значенням може бути порожній рядок. Щоб вивести значення параметра, використовують символ $ перед його ім'ям. Так, команда

$ echo name

видасть на екран слово name, а команда

$ echo $name

видасть значення змінної name (якщо таке, звичайно, задано).

5.6.1 Різновиди параметрів

Параметри поділяються на три класи: позиційні параметри, спеціальні параметри(іменами яких служать перераховані щойно спеціальні символи) і змінні оболонки.

Імена (ідентифікатори) позиційних параметрівскладаються з однієї або більше цифр (лише з одиночного нуля). Значення позиційних параметрів є аргументи, які були задані при запуску оболонки (перший аргумент є значенням позиційного параметра 1 і т. д.). Змінити значення позиційного параметра можна за допомогою вбудованої команди set. Значення цих параметрів змінюються також на час виконання оболонкою однієї з функцій (про це буде розказано нижче, розд. 5.8).

Спеціальні параметриє шаблонами, заміна (підстановка) яких провадиться наступним чином.

Таблиця 5.2.Спеціальні параметри.

Параметр

Правила заміни

Замінюється позиційними параметрами, починаючи з першого. Якщо заміна проводиться всередині подвійних лапок, цей параметр замінюється на одне єдине слово, складене з усіх позиційних параметрів, розділених першим символом спеціальної змінної IFS (про неї буде сказано нижче). Тобто ``$*"" еквівалентно ``$1c$2c..."", де c - перший символ у значенні змінної IFS. Якщо IFS присвоєно порожнє значення або не встановлено, параметри поділяються пробілами

Замінюється позиційними параметрами, починаючи з першого. Якщо заміна проводиться всередині подвійних лапок, то кожен параметр замінюється окремим словом. Так, `` [email protected]"" еквівалентно ""$1"" ""$2"" ... Якщо позиційних параметрів немає, то значення не надається (параметр @ просто видаляється)

Замінюється десятковим значенням числа позиційних параметрів

Замінюється статусом виходу останнього з програмних каналів, що виконувались на передньому плані.

(дефіс)

Замінюється поточним набором значень прапорів, встановлених за допомогою вбудованої команди setабо при запуску самої оболонки

Замінюється ідентифікатором процесу (P ID) оболонки

Замінюється ідентифікатором процесу (P ID) останньою з фонових (асинхронно виконуваних) команд, що виконуються.

Замінюється ім'ям оболонки або скрипта. Якщо bashзапускається для виконання командного файлу, $0 дорівнює імені цього файлу. Інакше це значення дорівнює повному шляху до оболонки

(підкреслення)

Замінюється останнім аргументом попередньої з команд (якщо це параметр або змінна, то підставляється її значення)

Спеціальні параметри, перелічені у наведеній вище таблиці, відрізняються тим, що на них можна лише посилатися; надавати їм значення не можна.

Змінназ погляду оболонки - це параметр, що позначається ім'ям. Значення змінним надаються за допомогою оператора такого виду

$name=value

де name- Ім'я змінної, а value— значення, що їй надається (може бути порожнім рядком). Ім'я зміною може складатися лише з цифр і літер, і не може починатися з цифри. Значення може бути будь-який текст. Якщо значення містить спеціальні символи, його треба взяти в лапки. Надане значення цих лапок не містить, звичайно. Якщо змінна задана, її можна видалити, використовуючи вбудовану команду оболонки unset.

Набір всіх встановлених змінних оболонок із присвоєними ним значеннями називається оточенням (enviro nment) або середовищем оболонки. Ви можете переглянути його за допомогою команди setбез параметрів (тільки, можливо, слід організувати конвеєр "set | less"). У виведенні цієї команди всі змінні оточення перераховуються в алфавітному порядку. Щоб переглянути значення однієї конкретної змінної, можна замість команди set(у висновку якої потрібну змінну ще шукати та шукати) можна скористатися командою

$ echo $name

(правда, в цьому випадку ви повинні знати ім'я змінної, що цікавить вас).

Серед змінних, які ви побачите у виведенні команди set, зустрічаються дуже цікаві змінні Зверніть, наприклад, увагу на змінну RANDOM. Якщо ви кілька разів поспіль виконайте команду

$ echo $RANDOM

ви щоразу отримуватимете нове значення. Справа в тому, що ця змінна повертає випадкове ціле з інтервалу 0 - 32768.

5.6.2 Запрошення оболонки

Одна з дуже важливих змінних має ім'я PS1. Ця змінна дає вигляд запрошення, яке bashвиводить, коли очікує на введення чергової команди користувачем. За умовчанням цієї змінної присвоєно значення \s-\v\$. Взагалі-то в bashІснує чотири запрошення, що використовуються в різних ситуаціях. Змінна PS1задає вигляд рядка запрошення, що видається тоді, коли оболонка чекає на введення команди. Вторинне запрошення, яке задається змінною PS2, з'являється тоді, коли оболонка очікує від користувача введення ще якихось даних, необхідні продовження роботи запущеної команди чи програми. Типово змінна PS2має значення " >" . Ви вже мали змогу бачити це запрошення, коли запускали команду catдля введення даних із клавіатури у файл. Інший приклад – команда ftp, після запуску якої запрошення теж набуває такого вигляду.

Запрошення, яке задається змінною PS3, використовується в команді select. Запрошення, яке задається змінною PS4, виводиться перед кожною командою, коли bashвідстежує процес виконання. Значення за замовчуванням - " + ".

Якщо у вас є таке бажання, ви можете змінити вигляд змінних PS1і PS2. При цьому можна використовувати як будь-які символи, що вводяться з клавіатури, так і кілька спеціальних символів, які при формуванні рядка запрошення декодуються відповідно до табл. 5.3(наводимо лише деякі з них, для прикладу; повний список див. в man-сторінці по утиліті bash) .

Таблиця 5.3.Спеціальні символи для формування запрошення

Символ

Його значення

Звуковий сигнал (ASCII-код 07)

Дата у форматі "День, місяць, число", наприклад Срд, Окт, 17.

Ім'я хоста (hostname) до першої точки

Повне ім'я хоста

Cьогодні у 24-годинному форматі: HH:MM:SS (години:хвилини:секунди)

Cьогодні у 12-годинному форматі: HH:MM:SS

Cьогодні у 12-годинному форматі am/pm

Ім'я користувача, який запустив оболонку

Повне ім'я поточного робочого каталогу (починаючи з кореня)

Поточний робочий каталог (без вказівки шляху)

Символ #, якщо оболонка запущена суперкористувачем, та символ $ якщо оболонка запущена звичайним користувачем.

\nnn

Символ, що має вісімковий код nnn

Новий рядок (переклад рядка)

Ім'я оболонки

Поточний номер команди

Зворотний слеш (a backslash)

Початок послідовності символів, що не друкуються (цей символ може бути використаний для того, щоб включити в текст підказки послідовність керуючих символів терміналу)

Кінець послідовності не друкованих символів

Порядковий номер цієї команди в історії команд

Поточний номер команди (порядковий номер виконуваної команди в рамках поточної сесії) може відрізнятися від номера даної команди у списку історії команд, оскільки останній включає команди, які були збережені у файлі історії команд.

Після того, як значення змінної, що визначає підказку, прочитане оболонкою, в ньому можуть бути зроблені підстановки відповідно до правил розширення параметрів, підстановок в іменах команд та арифметичних виразах, а також розбиття слів (word splitting). Про ці правила буде розказано трохи нижче, в розд. 5.7.

Наприклад, після виконання команди (оскільки в рядку є пробіл, лапки обов'язкові)

# PS1="[\ [email protected]\h \W]\$"

у стандартному запрошенні буде виводитись квадратна дужка, ім'я користувача, символ @ , ім'я комп'ютера, пробіл, назва поточного каталогу (без вказівки шляху), квадратна дужка, що закриває, і символ $ (якщо в оболонці працює простий користувач) або # (якщо оболонка запущена від імені користувача root).

5.6.3 Змінна PATH

Ще одна дуже важлива змінна має ім'я PATH. Вона задає перелік шляхів до каталогів, у яких bashздійснює пошук файлів (зокрема, файлів з командами) у випадках, коли повний шлях до файлу не заданий у командному рядку. Окремі каталоги в цьому переліку поділяються двокрапками. Типово змінна PATHвключає каталоги /usr/local/bin, /bin, /usr/bin, /usr/X11R6/bin,тобто має вигляд:

/usr/local/bin:/bin:/usr/bin:/usr/X11R6/bin:

Для того, щоб додати каталог до цього списку, потрібно виконати таку команду:

# PATH=$PATH:new_path.

При здійсненні пошуку оболонка переглядає каталоги саме в тому порядку, як вони перераховані у змінній PATH.

Зазначимо, що можна включити до цього списку та поточного каталогу, додавши в змінну PATH точку. Однак цього не рекомендується робити з міркувань безпеки: зловмисник може покласти в загальнодоступний каталог команду, ім'я якої збігається з однією з команд, що часто виконуються суперкористувачем, але виконує зовсім інші дії (особливо якщо поточний каталог стоїть на початку переліку шляхів пошуку).

5.6.4 Змінна IFS

Ця змінна визначає роздільники полів (Internal Field Separator), які використовуються при операції поділу слів при перетвореннях командного рядка, що виконуються оболонкою перед тим, як запустити командний рядок на виконання. Значення цієї змінної за промовчанням - "<Пробел><Символ_ новой_ строки>".

5.6.5 Поточний та домашній каталоги

Ім'я поточного каталогу зберігається в змінній оточенні (з ім'ям PWD), і значення цієї змінної змінюється при кожному запуску програми cd(А також при зміні поточного каталогу будь-яким іншим способом, наприклад, через Midnight Commander).

Аналогічно повне ім'я (із зазначенням шляху) домашнього каталогу користувача, який запустив цей процес, зберігається в змінній HOME.

5.6.6 Команда export

Коли оболонка запускає виконання якусь програму чи команду, вона передає їм частина змінних оточення. Для того, щоб змінна оточення передавалася процесу, що запускається з оболонки, її потрібно задавати за допомогою спеціальної команди export, тобто замість

$name=value

треба записати

$ export name=value

У такому випадку всі програми, що запускаються з оболонки (у тому числі вторинні екземпляри самої оболонки) матимуть доступ до заданих таким чином змінних, тобто можуть викликати їх значення за іменами.

В. Костромін (kos at rus-linux dot net) – 5.6. Параметри та змінні. Оточення оболонки

Змінні оточення в Linux – це спеціальні змінні, визначені оболонкою та використовувані програмами під час виконання. Вони можуть визначатися системою та користувачем. Системні змінні оточення Linux визначаються системою та використовуються програмами системного рівня.

Наприклад, команда PWD використовує системну змінну, щоб зберігати колишню робочу директорію. Змінні оточення користувача встановлюються користувачем, для поточної оболонки, тимчасово або постійно. Вся концепція додавання та видалення змінних оболонок крутиться навколо кількох файлів, команд та різних оболонок.

Якщо дивитися ширше, змінна оточення може бути трьох типів:

1. Локальні змінні оточення

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

2. Користувальницькі змінні оболонки

Ці змінні оболонки в Linux визначаються для конкретного користувача і завантажуються кожного разу, коли він входить в систему за допомогою локального терміналу, або підключається віддалено. Такі змінні, як правило, зберігаються у файлах конфігурації: .bashrc, .bash_profile, .bash_login, .profile або інших файлах, розміщених у директорії користувача.

3. Системні змінні оточення

Ці змінні доступні у всій системі для всіх користувачів. Вони завантажуються під час старту системи із системних файлів конфігурації: /etc/environment, /etc/profile, /etc/profile.d/ /etc/bash.bashrc.

Конфігураційні файли змінних оточення Linux

Тут ми коротко розглянемо різні конфігураційні файли, наведені вище, які використовуються для налаштування змінних оточення для всієї системи або конкретного користувача.

.bashrc

Це файл змінних конкретного користувача. Завантажується щоразу, коли користувач створює термінальний сеанс, тобто, простіше кажучи, відкриває новий термінал. Всі змінні оточення, створені в цьому файлі набувають чинності щоразу, коли почалася нова термінальна сесія.

.bash_profile

Ці змінні набувають чинності щоразу, коли користувач підключається віддалено по SSH. Якщо цей файл відсутній, система буде шукати .bash_login або .profile.

/etc/environment

Цей файл для створення, редагування та видалення будь-яких змінних оточення на системному рівні. Змінні оточення, створені в цьому файлі, доступні для всієї системи, для кожного користувача і навіть при віддаленому підключенні.

/etc/bash.bashrc

Системний bashrc. Цей файл виконується для кожного користувача, коли він створює нову термінальну сесію. Це працює тільки для локальних користувачів, при підключенні через інтернет такі змінні не будуть видно.

/etc/profile

Системний файл profile. Усі змінні з цього файлу доступні будь-якому користувачеві в системі, тільки якщо він увійшов віддалено. Але вони не будуть доступні при створенні локальної термінальної сесії, тобто якщо ви просто відкриєте термінал.

Всі змінні оточення Linux створені за допомогою цих файлів, можуть бути видалені лише видаленням їх звідти. Тільки після кожної зміни потрібно або вийти і зайти в систему, або виконати цю команду:

source имя_файла

Додавання користувацьких та системних змінних оточення в Linux

Тепер, коли ви знаєте небагато теорії, перейдемо до практики. Локальні змінні оточення в Linux можна створювати такими командами:

var=значення
$ export var = значення

Ці змінні будуть доступні лише для поточної термінальної сесії.

Для видалення змінних оточення можна використати кілька команд:

1. Використання env

За промовчанням за допомогою env можна переглянути всі встановлені змінні середовища. Але з опцією -i вона дозволяє тимчасово видалити всі змінні оболонки та виконати команду без змінних.

env -i команда

Var – це будь-яка змінна, яку ви хочете передати цій команді.

Така команда запустить оболонку взагалі без змінних оточення:

Після запуску такого оточення не буде доступно жодних змінних, але після виходу все повернеться на свої місця.

2. Використання unset

Це інший спосіб видалення змінних оточення Linux. Unset видаляє змінну на ім'я до кінця поточної сесії:

unset ім'я_змінної

3. Встановити значення змінної в ""

Це найпростіший спосіб видалення змінних оточення в Linux, встановлюючи порожнє значення змінної, ви видаляєте її до кінця поточної сесії.

Зауваження: За допомогою таких способів ви можете змінювати значення системних або змінних користувачів, але вони будуть актуальні тільки для поточного сеансу.

Створення користувацьких та системних змінних оточення

У цьому розділі розглянемо як встановити та видалити системні та користувацькі змінні не тільки для поточного сеансу, а так, щоб ефект зберігався після перезавантаження.

1. Встановлюємо та видаляємо локальні змінні в Linux

Давайте створимо локальну змінну VAR і встановимо будь-яке значення, потім видалимо її за допомогою unset і переконаємося що вона видалена:

VAR1="Losst"
$ echo $VAR1
$ unset VAR1
$ echo $VAR1

Інший спосіб створити змінну – команда export. Видалимо її надавши порожнє значення:

export VAR="Losst"
$ echo $VAR
$ VAR =
$ echo $VAR

Тепер створимо змінну VAR2 також задамо їй значення. А потім тимчасово видалимо всі локальні змінні, виконавши env -i. Вона запустить оболонку без будь-яких змінних. Після введення exit усі змінні будуть відновлені.

VAR2="Losst"
$ echo $VAR2
$ env -i bash
$ echo $VAR2

Встановлення та видалення змінних користувачів

Відредагуйте файл.bashrc у вашій домашній директорії, додавши команду export, для експортування потрібної змінної. Потім виконайте команду source, щоб застосувати зміни. Створимо, наприклад, змінну CD:

Додайте такий рядок (o, потім вставити, потім Esc і: wq):

export CD="This is Losst Home"

Тепер залишилось оновити конфігурацію:

source .bashrc
$ echo $CD

Щоб видалити цю змінну, просто видаліть її з.bashrc.

Тепер додамо змінну оточення за допомогою .bash_profile. Ця змінна, як ви вже знаєте, буде доступна тільки при віддаленому вході:

vi .bash_profile

Додати рядок:

export VAR2="This is Losst Home"

І виконайте ці команди, щоб застосувати зміни та перевірити додавання змінної:

source .bash_profile
$ echo $VAR2

Змінна недоступна, оскільки ви створили локальну термінальну сесію, тепер підключіться до ssh:

ssh [email protected]
$ echo $VAR2

Видалити цю змінну оточення можна так само, як і в попередньому випадку, видаливши її з файлу.

Зауваження: Ці змінні доступні завжди, але не всім користувачам.

Встановлення та видалення системних змінних оточення

Створимо змінну, доступну для всіх користувачів, у всіх термінальних сесіях, крім віддалених, додаванням її до /etc/bash.profile:

vi /etc/bash.profile

export VAR="This is system-wide variable"

Потім оновлюємо:

source /etc/bash.bashrc

Тепер ця змінна доступна всім користувачам, у всіх терміналах:

echo $VAR
$ sudo su
$ echo $VAR
$ su -
$ echo $VAR

Якщо ви бажаєте зробити змінну оточення доступною для всіх користувачів, які підключаються до цієї машини віддалено, відредагуйте файл /etc/profile:

export VAR1="Цей системний простір variable для лише remote sessions"

Оновіть конфігурацію та перевірте, чи доступна змінна.

source /etc/profile
$ echo $VAR1

Якщо потрібно додати змінну оточення до Linux, так щоб вона була доступна і віддалено, і для локальних сесій, експортуйте її в /etc/environment:

vi /etc/environment

export VAR12="I am available everywhere"

Перевіряємо:

source /etc/environment
$ echo $VAR12
$ sudo su
$ echo $VAR12
$ exit
$ssh localhost
$ echo $VAR12

Змінні оточення ( environment variable) використовуються для зберігання загальних значень змінних у межах різних сценаріїв та програм. Такі змінні можна встановлювати на час, наприклад на період роботи конкретної оболонки терміналу, або на період сесії користувача, або встановити змінну оточення на глобальному рівні - для всієї системи.

Змінні оточення

$HOME
Змінна містить шлях до домашнього каталогу поточного користувача. $USER
Ім'я поточного користувача $PATH
Список каталогів для пошуку оболонкою програм, що виконуються. $PWD
Шлях до поточного робочого каталогу (або pwd). Приклад: dir_path = $ (pwd). $SHELL
Інтерпретатор за промовчанням $RANDOM
Генерує рандомне число 0.32767 при кожному доступі до змінної. $SECONDS
Час у сік. з моменту запуску командної оболонки. $? Результат виконання попередньої команди. $HOSTNAME
Ім'я комп'ютера $HISTFILE
Дорога до файлу історії інтерпретатора $IFS
Список символів-розділювачів команд, параметрів, елементів масиву (за замовчуванням: пробіл, таб, новий рядок) $PS1
Шаблон запрошення інтерпретатора рядка.

Тимчасове встановлення змінної оточення

Установка змінної оточення на період сесії:

# Для нового процесу env ім'я_змінної=значення [команда] # Для поточної оболонки та всіх її підпроцесів export ім'я_змінної=значення [команда]

Значення змінної зберігається до перезавантаження системи.

Встановлення постійного значення

Змінні оточення на рівні системи встановлюються через файл /etc/environment:

ENVIRONMENT="dev"

Встановлення змінного оточення для конкретного користувача через файл ~/.bashrc або ~/.bash_profile:

PATH="$(PATH):/home/user/bin:"

Увага!

Файл ~/.bash_profile буде виконано під час запуску інтерпретатора з ключем -l. При локальному вході файл не читається!

Також слід пам'ятати, що зміни набудуть чинності лише після перезавантаження сеансу!

Перегляд значення змінної оточення

Для перегляду значення змінної оточення є команда printenv:

Printenv<имя_переменной>

#shell, #bash, #environment

Змінні оточення Linux разом із змінними оболонки - те, що визначає налаштування в рамках сесії користувача.

Вони автоматично завантажуються, але можуть бути перевизначені. Оточення створюється щоразу при логіні в систему.

Змінні оточення Linux, змінні оболонки

Змінні оточеннявикористовуються для процесу користувальницького shell і всіх дочірніх процесах, що породжуються в ньому.

Змінні оболонкимістять дані, що визначають стан поточної сесії. Наприклад, поточна директорія.

У кожній сесії використовують і змінні оточення, і змінні оболонки.

Список змінних оточення можна подивитися виконавши printenvабо env

……
LC_MEASUREMENT=ua_UA.UTF-8
LESSCLOSE=/usr/bin/lesspipe %s %s
LC_PAPER=uk_UA.UTF-8
LC_MONETARY=ua_RU.UTF-8
LANG=en_US.UTF-8
……

Різниця в тому, що printenvдозволяє виводити дані щодо певної змінної - наприклад:

Перевага env у тому, що з'являється можливість передати змінну певній команді

Наприклад:

env SHELL="/bin/bash" ls -la /opt

Переглянути змінні середовища

BASH=/bin/bash
BASHOPTS=checkwinsize:cmdhist:complete_fullquote:expand_aliases:extglob:extquote:force_fignore:histappend:interactive_comments:progcomp:promptvars:sourcepath
BASH_ALIASES=()
BASH_ARGC=()
……

Висновок можна перенаправити в lessщоб у ньому зручніше було орієнтуватися

Щоб не змінюючи поточне оточення, позбутися зайвої інформації у висновку можна зробити так

У POSIX режимі не будуть виводитись задані bash функції

Найчастіше використовувані змінні:
  • SHELL- оболонка, яка інтерпретує команди
  • USER- Користувач
  • PWD- поточний каталог
  • TERM- Тип, терміналу, який емулюється

Команди в оболонці дозволяють змінювати значення змінних. Так pwd виводить у консоль поточну директорію

/home/admin

Це змінна оболонка PWD

[email protected]:~$ set | grep PWD

OLDPWD=/tmp
PWD=/home/admin

Перейдемо в /tmp і подивимося як зміниться значення

[email protected]:~$ cd /tmp/

[email protected]:/tmp$ set | grep PWD

OLDPWD=/home/admin
PWD=/tmp

Можна побачити при зміні каталогу просто змінюється значення змінної shell-а PWD, також змінюється і OLDPWD

Як встановити змінну оточення або оболонки

Змінна оболонка додається наступним чином

SOMEVAR="Hi there"

У виведенні env її не буде, тому що це змінна саме shell, а не оточення

Переглянути вміст можна через echo, додавши знак $ перед ім'ям

Hi there

Щоб змінну додати в оточення її потрібно експортувати

export SOMEVAR="Hi there"

SOMEVAR=Hi there

Після цього значення успадковуватиметься дочірніми процесами.

Видалити змінну оточення можна тією ж командою export з ключем -n

З оболонки значення видаляється unset

Автоматичне завантаження змінних при логіні

Linux системи використовують файли ~/.bashrc, ~/.bash_profile, ~/.bash_loginабо ~/.profileвизначення змінних. Файли зчитуються при логіні, який використовується залежить від дистрибутива.

У Ubuntu/Debain це ~/.bashrc. До нього додаються як змінні оточення, і змінні оболонки.

Найпершим зчитується /etc/profile. У ньому встановлено і може бути перевизначено які файли і в якому порядку використовувати далі.

Для non-login сесії змінні задаються /etc/bash.bashrc. Така сесія властива скриптам, що запускаються у фоні.

Для більшості завдань достатньо редагувати ~/.bashrc.

Об'єкти, які задаються іменами і містять дані, що використовуються принаймні одним, зазвичай, декількома додатками, називаються змінними середовища. Простіше кажучи, змінна оточення є не чим іншим, як змінною, яка має ім'я та значення.

Значеннями змінного середовища може бути редактор за замовчуванням, який використовуватиметься, наприклад, розташування всіх файлів, які можуть бути виконані в системі або локальні налаштування для системи. Для початківців це трохи складно, але змінна оточення – відмінний спосіб спільного використання налаштувань конфігурації між кількома програмами та процесами.

У пакеті Coreutils розміщені програми env та printenv. Щоб перерахувати всі змінні середовища, які мають значення, просто введіть:

$printenv

В оболонці bash існують два типи змінних середовища:

  • Глобальні змінні
  • Місцеві змінні

Глобальні змінні оточення

З сеансу оболонки відображаються глобальні змінні оточення та будь-які дочірні процеси, які генерує оболонка.

З іншого боку, локальні змінні можуть бути доступні в оболонці тільки за умови їх створення. Це робить глобальні змінні середовища корисними у додатках, які вимагають інформації з батьківського процесу та породжують дочірні процеси.

За промовчанням система Linux встановлює певні глобальні змінні середовища під час запуску сеансу bash. Змінні системного середовища щоразу використовують усі великі літери, щоб відрізняти їх від звичайних змінних середовища користувача.

Локальні змінні середовища

Оскільки їхнє ім'я вказує, що змінні локального середовища можуть відображатися лише у локальному процесі, у якому вони визначені. Не змішуйте, хоч і про змінні локального середовища, вони однаково важливі як глобальні змінні середовища. Фактично, система Linux також за промовчанням визначатиме стандартні локальні змінні середовища для вас. Це стає складно, коли ви намагаєтеся побачити список змінних локального середовища. На жаль, для нас немає команди, яка відображатиме лише локальні змінні середовища. Існує команда, яка відображає всі змінні середовища задані для певного процесу. Зауважте, що це також включає глобальні змінні оточення.

Встановлення змінних середовища

Ви можете створювати власні змінні середовища прямо з оболонки bash. У наступному розділі ми покажемо вам, як створювати власні змінні середовища та посилатися на них із вашої інтерактивної програми оболонки або оболонки.

Налаштування змінних локального середовища

Після запуску оболонки bash (або появи сценарію оболонки) вам дозволено створювати локальні змінні, які помітні всередині вашого shell-процесу. Ви можете привласнити змінну оточення змінної string або numeric за допомогою знаку рівності, якому надається значення змінної:

$andreyex_test=testing $echo $andreyex_test testing $

Вітаємо, ви щойно створили свою першу змінну. Просто пам'ятайте, що будь-коли потрібно посилатися на значення змінного середовища andreyex_test, просто посилайтеся на неї на ім'я $ andreyex_test.

Якщо вам потрібно призначити рядок значень, що містять пробіли, вам потрібно буде використовувати один лапок, щоб вказати початок і кінець рядка:

$ andreyex_test = test along string - bash : a : command not found $ andreyex_test = " test along string " $ echo $ andreyex_test testing a long string

Якщо залишити його без поодиноких лапок, оболонка bash припускає, що наступний символ – це ще одна команда для обробки.

Зверніть увагу, що для змінної локального оточення, яку ми визначили, ми використовували малі літери, змінні системного середовища, які ми бачили досі, використовували всі великі літери.

В оболонці bash це стандартна угода. Якщо ви настроюєте нові змінні середовища, це не потрібно, але рекомендується використовувати літери. Це допомагає диференціювати ваші особисті змінні середовища з результатів змінних системного середовища.

ПРИМІТКА. Дуже важливо, щоб між ім'ям змінного середовища, знаком рівності та значенням не було прогалин. Якщо ви поміщаєте будь-які прогалини в привласнення, bash інтерпретує значення як окрему команду:

$andreyex_test2 = test-bash: andreyex_test2: command not found $

Встановлене локальне змінне середовище у вашому процесі оболонки буде доступне для використання в будь-якому місці вашого shell-процесу. Але якщо ви створюєте іншу оболонку, вона недоступна у дочірній оболонці:

$ bash $ echo $andreyex_test $ exit exit $ echo $andreyex_test testing a long string $

І тут ми почали дочірню оболонку. Як можна помітити, змінна середовища andreyex_test недоступна в дочірній оболонці (вона містить порожнє значення). Після того як ми залишили дочірню оболонку і повернулися до вихідної оболонки, змінна локального середовища все ще була доступна.

Аналогічно, якщо ви встановите локальну змінну оточення в дочірньому процесі після того, як ви залишите дочірній процес, змінна локального середовища перестає бути доступною:

$ bash $ andreyex_test = testing $ echo $ andreyex_test testing $ exit exit $ echo $ andreyex_test $

Змінна середовища andreyex_test, встановлена ​​в дочірній оболонці, не існує, коли ми повертаємось до батьківської оболонки.

Налаштування глобальних змінних оточення

Глобальні змінні оточення видно з усіх процесів дочірнього процесу, створених процесом, що встановлює глобальне змінне середовище. Метод, що використовується для створення глобального змінного оточення, полягає у створенні локального змінного середовища, а потім його експорту до глобального середовища.

Це виконується за допомогою команди export:

$ echo $andreyex_test testing a long string $ export andreyex_test $ bash $ echo $andreyex_test testing a long string $

Після того, як ми використовуємо експорт команди до локального змінного середовища andreyex_test, ми розпочали новий процес оболонки і переглянули значення змінного середовища andreyex_test. Цього разу команда export зробила глобальне змінне середовище глобальним, тому вона зберегла свою цінність.

Зверніть увагу, що при запуску експорту команди до локального змінного середовища ви не використовуєте знак долара для посилання на ім'я змінної.

Видалення змінних середовища

Очевидно, що якщо ви можете створити нове змінне середовище, було б розумно, що ви також можете видалити існуюче змінне середовище. Це можна зробити, використовуючи команду unset:

$echo $andreyex_test testing $unset andreyex_test $echo $andreyex_test $

Якщо ви посилаєтеся на змінне середовище в команді unset, майте на увазі не використовувати знак долара.

Працюючи з глобальними змінними середовища все стає трохи складніше. Якщо ви перебуваєте в дочірньому процесі і відключите глобальну змінну оточення, вона застосовна лише до дочірнього процесу. Глобальне змінне середовище залишається доступним у батьківському процесі:

$andreyex_test=testing $export andreyex_test $bash $echo $andreyex_test testing $unset andreyex_test $echo $andreyex_test $exit exit $echo $andreyex_test testing $

У цьому прикладі ми встановлюємо локальне змінне середовище, зване andreyex_test, потім експортуємо його, щоб зробити його глобальною змінною оточення. Потім ми почали процес дочірньої оболонки і були перевірені, щоб переконатися, що глобальна змінна середовища andreyex_test все ще доступна. Потім, ще перебуваючи в дочірній оболонці, ми використовували команду unset для видалення глобального змінного середовища andreyex_test, а потім вийшли з дочірньої оболонки. Тепер повернемося до вихідної батьківської оболонки, ми перевірили значення змінного середовища andreyex_test, і воно все ще діє.

Змінні середовища Shell за замовчуванням

Існують конкретні змінні середовища, які bash shell використовує визначення системного середовища. Ви завжди можете підрахувати ці змінні, які використовуватимуться у вашій системі Linux. Оскільки оболонка bash є похідною вихідної оболонки Unix Bourne, вона також включає змінні середовища, спочатку визначені у цій оболонці.

Наведені нижче приклади показують, що змінні середовища, що надаються оболонкою bash, сумісні з вихідною оболонкою Unix Bourne.

Досі найбільш цінним змінним середовищем у цьому списку є змінне середовище PATH.

Коли ви вводите команду в командній оболонці (інтерфейс командного рядка), оболонка повинна шукати систему, щоб знайти програму. Каталоги, які він шукає у пошуках команд, визначаються змінним середовищем PATH. У системі Linux змінне середовище PATH має виглядати приблизно так:

$ echo $PATH /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin $

І тут показано, що є вісім каталогів, у яких оболонка шукає команди. Кожен каталог розділяється двокрапкою, і в кінці змінної PATH немає кінця списку каталогів. Ви завжди можете додати додаткові каталоги в PATH, додавши новий каталог і додавши ще одну двокрапку. PATH також показує запит, в якому він шукає замовлення.

Крім стандартних змінних середовища Bourne, оболонка bash також надає кілька змінних, як показано:

Змінні Bash Shell Bourne:

CDPATH: список каталогів, розділених двокрапками, що використовуються як шлях пошуку для команди cd.
HOME: домашній каталог поточного користувача.
IFS: список символів, які розділяють поля, які використовуються оболонкою для розділення текстових рядків.
MAIL: ім'я файлу для поштової скриньки поточного користувача. Оболонка bash перевіряє файл для нової пошти.
MAILPATH: список декількох імен файлів для поштової скриньки поточного користувача. Оболонка bash перевіряє кожен файл цього списку для нової пошти.
OPTARG: значення останнього аргументу параметра, що обробляється командою getopts.
OPTIND: значення індексу останнього аргументу параметра обробленого командою getopts.
PATH: список каталогів, розділених двокрапками, де оболонка шукає команди.
PS1: Запрошення командного рядка основного командного рядка.
PS2: рядок запрошення на інтерфейс командного рядка вторинної оболонки.

Змінні середовища Shell bash:

BASH: повне ім'я шляху для виконання поточного екземпляра оболонки bash.
BASH_ENV: під час встановлення кожен сценарій bash намагається запустити файл запуску, визначений цією змінною перед запуском.
BASH_VERSION: номер версії поточного екземпляра bash оболонки.
BASH_VERSINFO: масив змінних, що містить окремі основні та молодші номери версій поточного екземпляра оболонки bash.
COLUMNS: містить ширину терміналу термінала, використовувану для поточного екземпляра оболонки bash.
COMP_CWORD: індекс змінної COMP_WORDS, який містить поточну позицію курсора.
COMP_LINE: поточний командний рядок.
COMP_POINT: індекс поточної позиції курсору щодо початку поточної команди.
COMP_WORDS: змінний масив, що містить окремі слова у поточному командному рядку.
COMPREPLY: змінний масив, що містить можливі коди завершення, що генеруються функцією оболонки.
DIRSTACK: масив змінних, що містить поточний вміст стеку директорій.
EUID: ефективний ідентифікатор користувача поточного користувача.
FCEDIT: стандартний редактор, який використовується командою fc.
FIGNORE: список суфіксів, розділених двокрапками, для ігнорування під час завершення імені файлу.
FUNCNAME: ім'я функції оболонки, що виконується в даний момент.
GLOBIGNORE: список розділених двокрапками шаблонів, які визначають набір імен файлів, які слід ігнорувати, розширюючи ім'я файлу.
GROUPS: змінний масив, який містить список груп, членом якого є поточний користувач.
histchars: до трьох символів, які управляють розширенням історії.
HISTCMD: номер історії поточної команди.
HISTCONTROL: Керує тими командами, які вводяться в списку історії оболонки.
HISTFILE: ім'я файлу для збереження списку історії оболонки (за промовчанням – історія.bash).
HISTFILESIZE: максимальна кількість рядків для збереження у файлі історії.
HISTIGNORE: список шаблонів, розділених двокрапкою, який використовується для визначення того, які команди ігноруються для історії файлу.
HISTSIZE: максимальна кількість команд, які зберігаються у файлі історії.
HOSTFILE: містить ім'я файлу, який має бути прочитаний, коли оболонці необхідно заповнити ім'я хоста.
HOSTNAME: Ім'я поточного хоста.
HOSTTYPE: Рядок, що описує машину bash-shell, працює.
IGNOREEOF: кількість послідовних символів EOF, які мають отримати оболонка перед виходом. Якщо це значення не існує, за замовчуванням воно дорівнює одиниці.
INPUTRC: ім'я файлу ініціалізації Readline (за замовчуванням – .inputrc).
LANG: категорії локалі для оболонки.
LC_ALL: перевизначає змінну LANG, визначаючи категорію локалі.
LC_COLLATE: встановлює порядок сортування, який використовується під час сортування рядкових значень.
LC_CTYPE: Визначає інтерпретацію символів, які використовуються під час розширення імені файлу та зіставлення зі зразком.
LC_MESSAGES: визначає параметр локалі, який використовується під час інтерпретації рядків з подвійними лапками, яким передує знак долара.
LC_NUMERIC: вказує локальне налаштування для форматування чисел.
LINENO: номер рядка у скрипті, що виконується.
LINES: Визначає кількість ліній доступних на терміналі.
MACHTYPE: рядок, який визначає тип системи у форматі cpu-company-system.
MAILCHECK: як часто оболонка повинна перевіряти (за промовчанням 60 секунд) для нової пошти.
OLDPWD: попередній робочий каталог, який використовується в оболонці.
OPTERR: якщо встановлено значення 1, оболонка bash відображає помилки, створені командою getopts.
OSTYPE: Рядок, який визначає операційну систему, в якій працює оболонка.
PIPESTATUS: змінний масив, що містить перелік значень статусу виходу з процесу переднього плану.
POSIXLY_CORRECT: якщо встановлено, bash запускається у режимі POSIX.
PPID: ідентифікатор процесу (PID) батьківського оболонкового процесу bash.
PROMPT_COMMAND: якщо встановлено, команда для виконання перед відображенням первинного запрошення.
PS3: запрошення використати команду select.
PS4: підказка, що відображається до того, як командний рядок буде луною, якщо використовується параметр bash -x.
PWD: поточний робочий каталог.
RANDOM: повертає випадкове число від 0 до 32767. Присвоєння значення цієї змінної генерує генератор випадкових чисел.
REPLY: змінна за промовчанням для команди читання.
SECONDS: кількість секунд після запуску оболонки. Надання значення скидає таймер на значення.
SHELLOPTS: список дозволених опцій оболонки bash, розділених двокрапкою.
SHLVL: вказує рівень оболонки, що збільшується на одиницю під час кожного запуску нової оболонки bash.
TIMEFORMAT: формат, який визначає, як оболонка відображає значення часу.
TMOUT: значення того, як довго (у секундах) команди вибору та читання повинні чекати на введення. Значення за умовчанням, що дорівнює нулю, означає, що потрібно чекати нескінченно.
UID: дійсний ідентифікатор користувача поточного користувача.

Ви можете помітити, що після використання команди set з'являються не всі змінні середовища за промовчанням. Поясненням цього може бути те, що це змінні середовища за умовчанням, в повному обсязі їх мають містити значення.

Висновок

У цьому посібнику ми розглянули світ змінних середовища Linux. Глобальні змінні оточення часто отримують доступ до будь-якого дочірнього процесу, породженого процесом, у якому вони визначені. Локальні змінні оточення будуть доступні лише з процесу, у якому визначено.

Система Linux використовує кожну глобальну та локальну змінні середовища для зберігання інформації про системне середовище. Ви зможете отримати доступ до цієї інформації з інтерфейсу командного рядка оболонки, а також внутрішніх сценаріїв оболонки. Оболонка bash використовує змінні системного середовища, визначені у вихідній оболонці UNO Bourne, як і безліч нових змінних середовища. Змінна середовища PATH визначає шаблон пошуку, який приймає оболонка bash для пошуку команди, що виконується. Ви зможете змінити змінне середовище PATH, щоб додати власні каталоги або, можливо, поточний символ каталогу, щоб спростити роботу з вашими програмами. Ви також можете створювати власні глобальні та локальні змінні середовища для власного використання. Після створення змінної середовища вона доступна всього сеансу оболонки.

Існує багато файлів запуску, які запускають оболонку bash після її запуску. Ці файли запуску можуть містити визначення змінних середовища для встановлення стандартних змінних середовища кожного сеансу bash. Після входу в систему Linux оболонка bash звертається до файлу запуску /etc/profile, а також трьох локальних файлів запуску для кожного користувача, $HOME/.bash, $HOME/.bash login і $HOME/.profile.

Користувачі будуть налаштовувати ці файли для активації змінних середовища та сценаріїв запуску для власного використання. Оболонка bash додатково надає змінні масиви оточення. Ці змінні середовища можуть містити кілька значень однієї змінної. Ви зможете отримати доступ до значень індивідуально, вказавши значення індексу або загалом, вказавши повне ім'я масиву змінних середовища. Нарешті, у цьому посібнику ми маємо згадати використання командних псевдонімів. Хоча не змінні середовища, псевдоніми команд поводяться майже як змінні середовища. Вони дозволяють вам визначати псевдонім для команди разом із її параметрами. Замість того, щоб вводити дуже довгу команду та параметри, ви зможете просто привласнити їй простий псевдонім та використовувати псевдонім у будь-який час у сеансі оболонки.