在我项目的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
可以工作。
如果我这样做的话,我什至可以使它在鱼中工作:
terraform import foo bar
所以
如果我使用bash而不是鱼,为什么会起作用?如果从设置了正确环境变量的bash壳打开鱼壳,为什么在鱼中起作用呢?
如何在鱼壳中使用terraform
而不必打开嵌套的bash和鱼壳?
答案 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