為什麼這個來源聲明不起作用?

為什麼這個來源聲明不起作用?

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

相關內容