Snažím se shrnout více skriptů shellu do jednoho velkého skriptu shellu, jako je tento:
#!/bin/sh
bash script1.sh
bash script2.sh
bash script3.sh
Všechny skripty sdílejí stejné proměnné var
a var2
. Chtěl jsem smazat definice proměnných z jednotlivých skriptů shellu a vložit je místo toho do skriptu velkého shellu, takže když změním hodnotu proměnných, musím to udělat pouze jednou.
Nicméně, když to udělám
#!/bin/sh
var1="1"
var2="2"
bash script1.sh
bash script2.sh
bash script3.sh
proměnné nejsou rozpoznány pomocí odkazů $var1
a $var2
v jednotlivých skriptech shellu.
Omlouvám se, pokud byla tato otázka položena již dříve, jsem ve skriptování obecně nový a nevěděl jsem, co mám hledat.
Bylo by také hezké vědět, jak bych mohl procházet skripty s více proměnnými vstupy, jako je
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
Přijatá odpověď:
Když spustíte skripty 1-3 v hlavním skriptu, každý z nich se spouští ve svém vlastním dílčím prostředí, což je důvod, proč nerozpoznají proměnné definované ve svém nadřazeném prostředí. Použijte export
pro zpřístupnění proměnných podsložkám:
#!/bin/sh
export var1="1"
export var2="2"
bash script1.sh
bash script2.sh
bash script3.sh
Alternativou (relevantní pro vaši druhou otázku) by bylo předání proměnných do skriptů jako poziční parametry:
#!/bin/sh
var1="1"
var2="2"
bash script1.sh "$var1" "$var2"
bash script2.sh "$var1" "$var2"
bash script3.sh "$var1" "$var2"
Ve skriptech 1-3 budou tyto proměnné dostupné jako $1
a $2
respektive.