Umgebungsvariablen werden nicht gesetzt, wenn das Echo durch eine Pipeline bei einer Funktion umgeleitet wird

Umgebungsvariablen werden nicht gesetzt, wenn das Echo durch eine Pipeline bei einer Funktion umgeleitet wird

Dieser Befehl:

echo '18' | source meta-cmf-raspberrypi/setup-environment

Nicht die Umgebungsvariablen setzen, sondern einfach mit folgendem ausführen:

source meta-cmf-raspberrypi/setup-environment

Mit "18" in der Eingabe.
Die Frage unter Link:Umgebungsvariablen werden nicht festgelegt, wenn meine Funktion in einer Pipeline aufgerufen wird

Das löst mein Problem nicht, weil ich Folgendes versucht habe:

echo '18' > >(source meta-cmf-raspberrypi/setup-environment)

Ohne Erfolg. Wie löse ich das Problem?

Antwort1

In der Pipeline wird das Skript in einer separaten Umgebung bezogen. Ebenso im Beispiel der Prozesssubstitution. Dies bedeutet, dass im Skript festgelegte Variablen in einer untergeordneten Umgebung für die aufrufende Shell festgelegt werden. Änderungen in einer untergeordneten Umgebung können niemals in die übergeordnete Umgebung übertragen werden.

Sie können dies auf zwei Arten lösen und vermeiden, das Skript in einer separaten Umgebung zu beziehen.

Die erste Möglichkeit würde in einer Shell funktionieren, die „Here-Strings“ versteht:

source meta-cmf-raspberrypi/setup-environment <<<18

Die zweite Möglichkeit besteht darin, ein standardmäßiges Here-Dokument zu verwenden:

source meta-cmf-raspberrypi/setup-environment <<END_INPUT
18
END_INPUT

In beiden Varianten wird das Skript in der aktuellen Umgebung bereitgestellt, wobei die Eingabe vom Here-String/Here-Dokument umgeleitet wird.

verwandte Informationen