該文件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 的定義。