Es gibt eine Unterschied zwischen einer Variablen und einer Umgebungsvariablen. Wenn Sie . foo.sh
ausführen und foo.sh
die Zeile FOO=value
enthält, wird die Variable FOO
im aktuellen Prozess zugewiesen. Es ist keine Umgebungsvariable. Um eine Umgebungsvariable zu werden (und somit Sub-Shells zur Verfügung zu stehen), muss sie exportiert werden. Allerdings bieten Schalen eine Option, die alle Variablenzuweisungen macht die Variable auf eine Umgebungsvariable zu fördern, wenn Sie also einfach tun:
set -a
. foo.sh
set +a
dann alle Variablenzuweisungen in foo.sh werden im laufenden Prozess gemacht Umgebungsvariablen werden. Beachten Sie, dass dies nicht unbedingt der Fall ist: In der bash ist das Exportieren einer Variablen eine Umgebungsvariable in der aktuellen Shell, aber in anderen Shells (z. B. dem Bindestrich) wird die Variable nicht zu einer Umgebungsvariablen in der aktuellen Shell. (Es tut weil es in der Umgebung von Subshells eingestellt wird, jedoch.)
ich habe ein anderes Skript bar.sh die Quelle foo.sh während Zeile gelesen hat; tun exportieren "$ line" getan
user2077092
Sie müssten auch "source bar.sh" verwenden, um die aktuelle Umgebung zu beeinflussen. – chepner
Auch die 'while' Schleife ist anstelle von' source foo.sh'; Du brauchst beides nicht. Es ist nicht falsch, nur überflüssig. – chepner