![當透過函數的管道重定向回顯時,未設定環境變數](https://rvso.com/image/170288/%E7%95%B6%E9%80%8F%E9%81%8E%E5%87%BD%E6%95%B8%E7%9A%84%E7%AE%A1%E9%81%93%E9%87%8D%E5%AE%9A%E5%90%91%E5%9B%9E%E9%A1%AF%E6%99%82%EF%BC%8C%E6%9C%AA%E8%A8%AD%E5%AE%9A%E7%92%B0%E5%A2%83%E8%AE%8A%E6%95%B8.png)
這個命令:
echo '18' | source meta-cmf-raspberrypi/setup-environment
不設定環境變量,而是簡單設定:
source meta-cmf-raspberrypi/setup-environment
輸入“18”。
連結中的問題:在管道中呼叫我的函數時未設定環境變數
沒有解決我的問題,因為我已經嘗試過:
echo '18' > >(source meta-cmf-raspberrypi/setup-environment)
沒有成功。我該如何解決這個問題?
答案1
在管道中,腳本是在單獨的環境中取得的。在流程替換範例中也是如此。這意味著腳本中設定的變數將在呼叫 shell 的子環境中設定。子環境中的變更永遠不會傳播到父環境。
您可以透過兩種方式解決此問題,避免在單獨的環境中取得腳本。
第一種方法可以在理解“here-strings”的 shell 中工作:
source meta-cmf-raspberrypi/setup-environment <<<18
第二種方法是使用標準的此處文件:
source meta-cmf-raspberrypi/setup-environment <<END_INPUT
18
END_INPUT
在這兩種變體中,腳本均源自當前環境,其輸入從此處字串/此處文件重定向。