В сценарии bash, что точка, за которой следует пробел, а затем путь означает?

63

Я столкнулся с этим примером, пытаясь установить USB-устройство внутри контейнера openvz, и я никогда раньше не видел конструкцию во второй строке. Можете ли вы объяснить, что это значит?

#!/bin/bash
. /etc/vz/vz.conf
    
задан Denis Connolly 26.12.2012 в 15:56
источник

2 ответа

76

Это синоним встроенного 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
$

Надеюсь, что это поможет.

    
ответ дан gniourf_gniourf 26.12.2012 в 16:01
3
  

Когда сценарий запускается с использованием «source», он запускается в пределах существующей оболочки, любые переменные, созданные или измененные скриптом, останутся доступными после завершения сценария.

Синтаксис       , filename [аргументы]

  source filename [arguments]
    
ответ дан Sureshkumar 24.04.2015 в 14:39