Em um script bash, o que significa um ponto seguido por um espaço e depois um caminho?

83

Me deparei com este exemplo ao tentar montar um dispositivo usb dentro de um contêiner openvz e nunca vi a construção na segunda linha antes. Você pode explicar o que isso significa?

#!/bin/bash
. /etc/vz/vz.conf
Denis Connolly
fonte

Respostas:

98

É um sinônimo do embutido source. Ele executará comandos de um arquivo no shell atual , conforme lido em help sourceou help ..

No seu caso, o arquivo /etc/vz/vz.confserá executado (muito provavelmente, ele contém apenas atribuições de variáveis ​​que serão usadas posteriormente no script). Difere de apenas executar o arquivo com, por exemplo, /etc/vz/vz.confde várias maneiras: o mais óbvio é que o arquivo não precisa ser executável; então você pensará em executá-lo, bash /etc/vz/vz.confmas isso só será executado em um processo filho, e o script pai não verá nenhuma modificação (por exemplo, de variáveis) que o filho fizer.

Exemplo:

$ # 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
$

Espero que isto ajude.

gniourf_gniourf
fonte
14
Apenas uma observação: .funcionará na maioria dos shells (sh, ash, ksh, etc), sourceé específico para o bash.
Dmytro Sirenko
3
@EarlGray sourcenão é apenas o bash - está em conchas de estilo C ( csh, tcsh) - e zsh também. .funciona em conchas no estilo Bourne, incluindo as listadas . Considerando que o bash é um shell no estilo Bourne e dificilmente qualquer script do bash de complexidade não trivial é executado em um shell no estilo C, é verdade que .deve ser considerado muito mais portátil. Mas o sourcesinônimo de bash .existe em parte para portabilidade.
Eliah Kagan
11
@EliahKagan sim, você está certo; é melhor dizer que .é universalmente portátil e sourceamplamente difundido, mas não funciona de maneira clara sh.
Dmytro Sirenko
5

Quando um script é executado usando o `source ', ele é executado no shell existente, quaisquer variáveis ​​criadas ou modificadas pelo script permanecerão disponíveis após a conclusão do script.

Sintaxe. filename [argumentos]

  source filename [arguments]
Sureshkumar
fonte