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