Die Datei tmp.sh
enthält:
func() {
ls
}
Wenn die Datei über bezogen wird source tmp.sh
, funktioniert die Funktion func
einwandfrei.
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 source
der Sicht von sollte es keinen Unterschied geben, da es /dev/stdin
sich 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.