【问题标题】:Can't export env vars inside env loop?无法在 env 循环中导出 env var?
【发布时间】:2021-06-18 16:27:07
【问题描述】:

我有一个函数尝试导出一些环境变量:

env -0 | while IFS='=' read -r -d '' env_var_name env_var_value; do
    # Some logic here, then:
    export MY_ENV_VAR=hello
done

但是,我刚刚注意到 exportunset 在此循环中不起作用。如果我不能在循环内执行这些导出,那么执行这些导出的最佳方法是什么?将它们存储在某个地方并在循环之外执行它们?

【问题讨论】:

标签: bash shell


【解决方案1】:

循环不是问题。问题实际上是管道。当您通过管道传递到命令时,会创建一个子shell,并且在该子shell 内设置的任何变量都会在它退出时消失。您可以使用进程替换来解决此问题:

while IFS='=' read -r -d '' env_var_name env_var_value; do
    # Some logic here, then:
    export MY_ENV_VAR=hello
done < <(env -0)

【讨论】:

  • 谢谢@jordanm,快速跟进:我称这个循环是一个脚本,然后将脚本传递给另一个:source export-vars.sh |&amp; format-log.shsource export.vars.sh 可以自己工作,但当我将它通过管道传输到 format-log.sh 时就不行了 - 有什么解决办法吗?
  • @Rory 除了删除 format-log.sh,我想不出解决这种情况的方法
猜你喜欢
  • 2015-07-07
  • 2019-08-06
  • 2016-01-12
  • 2020-01-24
  • 2021-02-28
  • 2021-08-03
  • 1970-01-01
  • 2020-03-09
  • 1970-01-01
相关资源
最近更新 更多