为什么这个源声明不起作用?

为什么这个源声明不起作用?

该文件tmp.sh包含:

func() {
   ls
}

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

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

-bash:func3:找不到命令

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

答案1

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

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

相关内容