Я натрапив на цей приклад, коли намагався встановити 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.