该文件tmp.sh
包含:
func() {
ls
}
如果文件是使用 获取的source tmp.sh
,则该函数func
可以正常工作。
但是,如果采购是作为cat tmp.sh | source /dev/stdin
bash 投诉完成的:
-bash:func3:找不到命令
这两种采购方式有什么区别?从source
的角度来看,应该没有任何区别,因为/dev/stdin
也是一个文件句柄。
答案1
来自 bash(1):管道中的每个命令都作为单独的进程(即在子shell 中)执行。
主 shell 无法访问其子 shell 的定义。