Я натрапив на цей приклад, коли намагався встановити USB-пристрій всередині контейнера openvz, і раніше ніколи не бачив конструкцію у другому рядку. Чи можете ви пояснити, що це означає?
#!/bin/bash
. /etc/vz/vz.conf
Я натрапив на цей приклад, коли намагався встановити USB-пристрій всередині контейнера openvz, і раніше ніколи не бачив конструкцію у другому рядку. Чи можете ви пояснити, що це означає?
#!/bin/bash
. /etc/vz/vz.conf
Відповіді:
Це синонім вбудованого 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
$
Сподіваюся, це допомагає.
source
- це не просто баш - це в оболонках у стилі C ( csh
, tcsh
) - і zsh теж. .
працює в оболонках у стилі Борна, включаючи перелічені . Зважаючи на те, що bash - це оболонка у стилі Борна і навряд чи якийсь баш сценарій нетривіальної складності, ймовірно, працює у оболонці в стилі С, це правда, .
слід вважати набагато більш портативним. Але source
синонім bash .
існує частково для портативності.
.
універсально портативний і source
широко розповсюджений, але не працює на простоті sh
.
Коли сценарій запускається з використанням "source", він запускається в межах наявної оболонки, будь-які змінні, створені або модифіковані сценарієм, залишаться доступними після завершення сценарію.
Синтаксис. ім'я файлу [аргументи]
source filename [arguments]
.
буде працювати в більшості оболонок (sh, зола, ksh тощо),source
є специфічним для bash.