这个命令:
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
在这两种变体中,脚本均源自当前环境,其输入从此处字符串/此处文档重定向。