Compartilhando variáveis em vários shell scripts

4

Estou tentando resumir vários scripts de shell em um script de shell grande, como este:

#!/bin/sh
bash script1.sh
bash script2.sh
bash script3.sh

Todos os scripts compartilham as mesmas variáveis var e var2 . Eu queria excluir as definições de variáveis dos scripts de shell individuais e colocá-las no script de shell grande, para que, quando eu alterar o valor das variáveis, eu tenha que fazer isso apenas uma vez.

No entanto, quando faço

#!/bin/sh
var1="1"
var2="2"
bash script1.sh
bash script2.sh
bash script3.sh

as variáveis não são reconhecidas pelas referências $var1 e $var2 nos scripts de shell individuais.

Desculpas se a pergunta já foi feita antes, sou novo no script em geral e não sabia o que pesquisar.

Também seria bom saber como eu poderia fazer um loop sobre os scripts com várias entradas variáveis, como

var1="1 2 3 4 5"
var2="a b c d e"
for i in $var1;do for j in $var2;do
script1.sh
script2.sh
done;done
    
por Kaly 30.05.2014 / 14:07

1 resposta

8

Quando você executa os scripts 1-3 dentro do seu script principal, eles são executados dentro de seu próprio sub-shell, e é por isso que eles não reconhecem as variáveis definidas em seu shell pai. Use export para disponibilizar variáveis para sub-shells:

#!/bin/sh
export var1="1"
export var2="2"
bash script1.sh
bash script2.sh
bash script3.sh

Uma alternativa (relevante para sua segunda pergunta) seria passar as variáveis para os scripts como parâmetros posicionais :

#!/bin/sh
var1="1"
var2="2"
bash script1.sh "$var1" "$var2"
bash script2.sh "$var1" "$var2"
bash script3.sh "$var1" "$var2"

Dentro dos scripts 1-3, essas variáveis estarão disponíveis como $1 e $2 , respectivamente.

    
por 30.05.2014 / 14:22