Я сталкивался с этим примером, когда пытался смонтировать 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
- это не просто bash, а оболочка в стиле C ( csh
, tcsh
) и zsh. .
работает в оболочках в стиле Борна, в том числе перечисленных . Учитывая, что bash - это оболочка в стиле Борна, и вряд ли какой-либо нетривиальный сценарий bash может выполняться в оболочке в стиле C, его правда .
следует считать гораздо более переносимым. Но source
синоним bash .
существует частично для переносимости.
.
он универсален и source
широко распространен, но не работает в простом виде sh
.
Когда скрипт запускается с использованием `source ', он запускается в существующей оболочке, любые переменные, созданные или измененные скриптом, останутся доступными после его завершения.
Синтаксис имя файла [аргументы]
source filename [arguments]
.
будет работать в большинстве оболочек (sh, ash, ksh и т. Д.),source
Специально для bash.