Warum funktioniert diese Quellenangabe nicht?

Warum funktioniert diese Quellenangabe nicht?

Die Datei tmp.shenthält:

func() {
   ls
}

Wenn die Datei über bezogen wird source tmp.sh, funktioniert die Funktion funceinwandfrei.

Wenn die Beschaffung jedoch als Bash-Beschwerden erfolgt cat tmp.sh | source /dev/stdin:

-bash: func3: Befehl nicht gefunden

Was ist der Unterschied zwischen den beiden Sourcing-Methoden? Aus sourceder Sicht von sollte es keinen Unterschied geben, da es /dev/stdinsich auch um einen Datei-Handle handeln würde.

Antwort1

Aus bash(1):Jeder Befehl in einer Pipeline wird als separater Prozess (d. h. in einer Subshell) ausgeführt.

Die Haupt-Shell hat keinen Zugriff auf die Definitionen ihrer Unter-Shells.

verwandte Informationen