为什么这个源语句不起作用?

Ksh*_*rma 1 bash pipe shell-script

该文件tmp.sh包含:

func() {
   ls
}
Run Code Online (Sandbox Code Playgroud)

如果文件是使用 获取的source tmp.sh,则该函数func可以正常工作。

但是,如果采购是作为cat tmp.sh | source /dev/stdinbash 投诉完成的:

-bash: func3: 命令未找到

这两种采购方式有什么区别?从source的角度来看,应该没有任何区别,因为它/dev/stdin也是一个文件句柄。

小智 6

来自 bash(1):管道中的每个命令都作为一个单独的进程(即在子 shell 中)执行。

主 shell 无法访问其子 shell 的定义。