在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
工作。
如果我这样做,我甚至可以让它在鱼身上工作:
- 从 Bash 设置环境变量
- 从 Bash 开始鱼壳
- 现在在鱼壳里,跑
terraform import foo bar
所以
如果我使用 bash 而不是鱼,为什么它会起作用?如果鱼壳是从设置了正确环境变量的 bash 壳打开的,为什么它在鱼中起作用?
如何在鱼壳中使用terraform
而不必打开嵌套的 bash 和鱼壳?
通用变量在所有 fish 会话之间共享,但它们不会自动导出到子进程。
我只是将所有set -U ...
实例更改为set -Ux ...
,一切正常。
编辑:在看到KurtisRader关于set -Ux
缺点的评论并阅读更多内容后,我现在意识到鱼就像bash一样具有source
命令。所以,在脚本中我可以使用
set -x foo bar
那我可以
$ source load_env.fish
而不仅仅是
$ ./load_env.fish