Що роблять "набір" та "експорт" bash-buildins?


46

Я трохи втрачаю, що стосується мети setта exportв Баша (і, мабуть, й інших снарядів теж).

Я думаю, це для встановлення змінних оточуючих середовищ, але це можна зробити просто за допомогою VARIABLE=VALUE, правда?

Також набираючи setта exportсамостійно показуйте різні значення.

То яке їх призначення?


дивіться також: unix.stackexchange.com/questions/3507/…
lesmana

Я завжди починаю з bash script із наступних двох. #! / usr / bin / env bash set -euxo pipefail Це посилання прекрасно пояснює те саме. coderwall.com/p/fkfaqq/…
147.3k

Відповіді:


50

exportекспорту для дітей поточного процесу, за замовчуванням вони не експортуються. Наприклад:

$ foo=bar
$ echo "$foo"
bar
$ bash -c 'echo "$foo"'

$ export foo
$ bash -c 'echo "$foo"'
bar

set, з іншого боку, встановлює атрибути оболонки, наприклад, позиційні параметри.

$ set foo=baz
$ echo "$1"
foo=baz

Зауважте, що bazне призначений foo, він просто стає буквальним позиційним параметром. setДивіться багато інших речей (переважно варіанти оболонок), див help set.

Що стосується друку, exportвиклик без аргументів друкує всі змінні в середовищі оболонки. setтакож друкує змінні, які не експортуються. Він також може експортувати деякі інші об'єкти (хоча слід зазначити, що це не портативний), див help export.


Дякую, що це дуже корисна відповідь. Однак, коли я встановлюю http_proxy лише за допомогою http_proxy = abc.com , це видно дочірнім процесам, наприклад, запуску wget, не експортуючи його. Як це може бути?
mydoghasworms

2
Дві можливі причини: @mydoghasworms По-перше, ви виконуєте команду як foo=bar command. Це неявний експорт для однієї команди. Друга можливість полягає в тому, що http_proxyвін вже експортується у ваше середовище до того, як ви його модифікуєте.
Кріс Даун

Ага так, ти маєш рацію. Блискуче, дякую!
mydoghasworms

6

Див . help set: набір використовується для встановлення атрибутів оболонки та позиційних атрибутів.

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.