Environment variables 地形不';t在fish中加载环境变量集
在我的项目的根文件夹Environment variables 地形不';t在fish中加载环境变量集,environment-variables,terraform,fish,terraform-provider-aws,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" 我运行它,然后运行命令terraformimportfoobar。它让我访问被拒绝 但是,如果我使用bash而不是fish,并且设置了相同的环境变量,那么terraformimportfoobar就可以工作了 如果我这样做,
main.tf
旁边,我有一个名为load_env.fish
的脚本,其中包含以下两行:
set -U AWS_SHARED_CREDENTIALS_FILE "~/path/to/file"
set -U AWS_PROFILE "my_profile"
我运行它,然后运行命令terraformimportfoobar
。它让我访问被拒绝
但是,如果我使用bash而不是fish,并且设置了相同的环境变量,那么terraformimportfoobar
就可以工作了
如果我这样做,我甚至可以让它在鱼身上工作:
terraform
,而不必打开嵌套的bash和fish shell?在所有fish会话之间共享,但它们不会自动导出到子进程
我只是简单地将set-U…
的所有实例更改为set-Ux…
,一切正常
编辑:在了解了set-Ux
的缺点并阅读了更多内容后,我现在意识到fish与bash一样拥有source
命令。所以,在脚本中,我可以使用
set -x foo bar
那我就可以了
$ source load_env.fish
而不仅仅是
$ ./load_env.fish
当从fish运行时,
aws sts获取调用方标识显示了什么?导出通用变量几乎总是一个坏主意。首先,考虑当您在shell 1中更改var时,shell 2将看到该更改,但是它不会影响由任何shell启动的任何进程继承的var的值。其次,将var设置为“通用”意味着您无法在一个shell会话中更改它(例如,进行实验),而不会影响所有其他shell会话。不要导出UVAR。