Estoy tratando de resumir varios scripts de shell dentro de un script de shell grande, como este:
#!/bin/sh
bash script1.sh
bash script2.sh
bash script3.sh
Todos los scripts comparten las mismas variables var
y var2
. Quería eliminar las definiciones de variables de los scripts de shell individuales y colocarlos en el script de shell grande, de modo que cuando cambie el valor de las variables solo tenga que hacerlo una vez.
Sin embargo, cuando lo hago
#!/bin/sh
var1="1"
var2="2"
bash script1.sh
bash script2.sh
bash script3.sh
las variables no son reconocidas por las referencias $var1
y $var2
en los scripts de shell individuales.
Disculpe si la pregunta se ha hecho antes, soy nuevo en la creación de secuencias de comandos en general y no sabía qué buscar.
También sería bueno saber cómo podría recorrer los scripts con múltiples entradas de variables, 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
Respuesta aceptada:
Cuando ejecuta los scripts 1-3 dentro de su script principal, cada uno se ejecuta dentro de su propio sub-shell, por lo que no reconocen las variables definidas en su shell principal. Usar export
para hacer que las variables estén disponibles para las subcapas:
#!/bin/sh
export var1="1"
export var2="2"
bash script1.sh
bash script2.sh
bash script3.sh
Una alternativa (relevante para su segunda pregunta) sería pasar las variables a los scripts como parámetros posicionales:
#!/bin/sh
var1="1"
var2="2"
bash script1.sh "$var1" "$var2"
bash script2.sh "$var1" "$var2"
bash script3.sh "$var1" "$var2"
Dentro de los scripts 1-3, estas variables estarían disponibles como $1
y $2
respectivamente.