Sto cercando di riassumere più script di shell all'interno di uno script di shell di grandi dimensioni, come questo:
#!/bin/sh
bash script1.sh
bash script2.sh
bash script3.sh
Tutti gli script condividono le stesse variabili var
e var2
. Volevo eliminare le definizioni delle variabili dai singoli script di shell e inserirle invece nello script di shell grande, in modo che quando cambio il valore delle variabili devo farlo solo una volta.
Tuttavia, quando lo faccio
#!/bin/sh
var1="1"
var2="2"
bash script1.sh
bash script2.sh
bash script3.sh
le variabili non vengono riconosciute dai riferimenti $var1
e $var2
nei singoli script della shell.
Mi scuso se la domanda è stata posta in precedenza, sono nuovo nello scripting in generale e non sapevo cosa cercare.
Sarebbe anche bello sapere come potrei scorrere gli script con più input variabili, come
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
Risposta accettata:
Quando esegui gli script 1-3 all'interno del tuo script principale, ciascuno viene eseguito all'interno della propria sottoshell, motivo per cui non riconoscono le variabili definite nella loro shell padre. Usa export
per rendere le variabili disponibili alle sottoshell:
#!/bin/sh
export var1="1"
export var2="2"
bash script1.sh
bash script2.sh
bash script3.sh
Un'alternativa (rilevante per la tua seconda domanda) sarebbe quella di passare le variabili agli script come parametri posizionali:
#!/bin/sh
var1="1"
var2="2"
bash script1.sh "$var1" "$var2"
bash script2.sh "$var1" "$var2"
bash script3.sh "$var1" "$var2"
All'interno degli script 1-3, queste variabili sarebbero quindi disponibili come $1
e $2
rispettivamente.