Von man 1 bash
:
Jeder Befehl in einer Pipeline wird als separater Prozess (dh in einer Subshell) ausgeführt.
Sie beschaffen aus einer Subshell; Die Variable wird in der Subshell festgelegt, nicht in der laufenden Shell Parent.sh
.
Dies wird Child.sh
in der rechten Shell angezeigt:
# Inside Parent.sh source ./Child.sh > >(sed 's/\(.*\)/\t\1/') echo "ChildVariable=$"
obwohl nun der Ausgang sed
erscheinen kann, nachdem die Ausgabe von echo
(a race condition ). Im Moment denke ich, der beste Weg, um mit dem Problem fertig zu werden, besteht darin, das gesamte Programm neu zu gestalten, sodass Sie die Ausgabe nicht aus einem Quell-Skript filtern müssen.
Sie haben bash so markiert source
und die Substitution ( > >(…)
) verarbeitet. Um diese tragbare (-ish?) Man braucht verwenden .
stattsource
und einige Tricks mit fifos vorstellen .