paulo1205
(usa Ubuntu)
Enviado em 19/03/2019 - 20:32h
A técnica mais comum para compartilhar variáveis entre múltiplos
scripts é ter um arquivo apenas com as definições das variáveis, e fazer cada um dos
scripts que usa tais variáveis invocar o arquivo que contém sua definição, através do comando
. (ponto; alguns
shells aceitam o comando alternativo
source). Por exemplo, você poderia ter um arquivo chamado
my_variables.conf e dois
scripts que incluíssem esse arquivo.
# /usr/local/etc/my_variables.conf
name="Paulo"
age=44
#!/bin/sh
# scriptt1.sh
. /usr/local/etc/my_variables.conf
echo "$name" # Vai imprimir “Paulo”.
# ...
#!/bin/sh
# script2.sh
. /usr/local/etc/my_variables.conf
echo "$age" # Vai imprimir “44”.
# ...
O comando
. faz com que o arquivo especificado seja interpretado como uma sequência de comandos do mesmo processo do
shell que está executando o
script. Assim sendo, essas definições de variáveis vão provocar o mesmo comportamento que teriam se o arquivo tivesse literalmente sido copiado para dentro de cada
script.
Note que eu usei variáveis comuns, não variáveis de ambiente, que seriam definidas/exportadas com o comando
export. Em muitos contextos, pode não ser interessante propagar algumas variáveis de ambiente para dentro dos processos filhos invocados pelo
shell (que é o comportamento padrão quando você roda qualquer comando). E você ainda fica um pouco mais imune a possíveis erros que existiriam se o usuário eventualmente alterasse ou apagasse uma variável de ambiente que lhe fosse forçada na hora do
login.
Outro efeito de o arquivo incluído ser considerado como um conjunto de comandos do
shell que o inclui é que você não é limitado apenas a definições de variáveis, mas pode usar qualquer construção válida no
shell. Desse modo, você poderia até optar por permitir que o usuário do
script use outros valores para as variáveis. Por exemplo, suponha que nosso arquivo
my_variables.conf fosse alterado para o seguinte.
[ -z "$name" ] && name="Paulo"
[ -z "$age" ] && age=44
Se eu então fizer uma predefinição (agora, sim, com variável de ambiente) da variável nome, antes de invocar o
script1.sh, o valor da variável será o que eu predefinir.
$ ./script1.sh
Paulo
$ name="Fulano" ./script1.sh
Fulano
... “Principium sapientiae timor Domini, et scientia sanctorum prudentia.” (Proverbia 9:10)