terraform不会加载鱼中设置的环境变量

时间:2019-09-11 12:24:09

标签: environment-variables terraform fish terraform-provider-aws

在我项目的main.tf旁边的根文件夹中,有一个名为load_env.fish的脚本,其中包含以下两行:

set -U AWS_SHARED_CREDENTIALS_FILE "~/path/to/file"
set -U AWS_PROFILE "my_profile"

运行该命令,然后运行命令terraform import foo bar。它给了我Access Denied

但是,如果我使用bash代替fish,并且设置了相同的环境变量,那么terraform import foo bar可以工作。

如果我这样做的话,我什至可以使它在鱼中工作:

  1. 通过bash设置环境变量
  2. 从bash启动鱼壳
  3. 现在进入鱼壳,运行terraform import foo bar

所以

如果我使用bash而不是鱼,为什么会起作用?如果从设置了正确环境变量的bash壳打开鱼壳,为什么在鱼中起作用呢?

如何在鱼壳中使用terraform而不必打开嵌套的bash和鱼壳?

1 个答案:

答案 0 :(得分:2)

Universal variables在所有会话之间共享,但它们不会自动导出到子流程

我只是将set -U ...的所有实例更改为set -Ux ...,一切正常。

编辑:看到KurtisRader's comment关于set -Ux的弊端并阅读了更多内容后,我现在意识到,鱼具有source命令,就像bash一样。因此,在脚本中我只能使用

set -x foo bar

那我可以

$ source load_env.fish

不只是

$ ./load_env.fish