Що означає сценарій bash, що означає крапка, після якої пробіл, а потім шлях?


83

Я натрапив на цей приклад, коли намагався встановити USB-пристрій всередині контейнера openvz, і раніше ніколи не бачив конструкцію у другому рядку. Чи можете ви пояснити, що це означає?

#!/bin/bash
. /etc/vz/vz.conf

Відповіді:


98

Це синонім вбудованого source. Він буде виконувати команди з файлу в поточній оболонці , прочитаного з help sourceабо help ..

У вашому випадку файл /etc/vz/vz.confбуде виконаний (дуже ймовірно, він містить лише змінні призначення, які будуть використані пізніше в сценарії). Він відрізняється від просто виконання файлу, наприклад, /etc/vz/vz.confбагатьма способами: найбільш очевидним є те, що файл не потрібно виконувати; тоді ви подумаєте запустити його, bash /etc/vz/vz.confале це виконає лише в дочірньому процесі, і батьківський скрипт не побачить жодних модифікацій (наприклад, змінних), які дитина робить.

Приклад:

$ # Create a file testfile that contains a variable assignment:
$ echo "a=hello" > testfile
$ # Check that the variable expands to nothing:
$ echo "$a"

$ # Good. Now execute the file testfile with bash
$ bash testfile
$ # Check that the variable a still expands to nothing:
$ echo "$a"

$ # Now _source_ the file testfile:
$ . testfile
$ # Now check the value of the variable a:
$ echo "$a"
hello
$

Сподіваюся, це допомагає.


14
Лише зауваження: .буде працювати в більшості оболонок (sh, зола, ksh тощо), sourceє специфічним для bash.
Дмитро Сіренко

3
@EarlGray source- це не просто баш - це в оболонках у стилі C ( csh, tcsh) - і zsh теж. .працює в оболонках у стилі Борна, включаючи перелічені . Зважаючи на те, що bash - це оболонка у стилі Борна і навряд чи якийсь баш сценарій нетривіальної складності, ймовірно, працює у оболонці в стилі С, це правда, .слід вважати набагато більш портативним. Але sourceсинонім bash .існує частково для портативності.
Ілля Каган

1
@EliahKagan так, ти маєш рацію; краще сказати, що .універсально портативний і sourceшироко розповсюджений, але не працює на простоті sh.
Дмитро Сіренко

5

Коли сценарій запускається з використанням "source", він запускається в межах наявної оболонки, будь-які змінні, створені або модифіковані сценарієм, залишаться доступними після завершення сценарію.

Синтаксис. ім'я файлу [аргументи]

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