【发布时间】:2017-06-24 07:19:39
【问题描述】:
如果我有一个简单的 bash 脚本 set_token.sh:
#!/bin/bash
output='export AWS_ACCESS_KEY_ID="111"
export AWS_SECRET_ACCESS_KEY="222"
export AWS_SESSION_TOKEN="333"'
echo "$output" | while read line; do eval $line; done
执行set_token.sh 没有成功设置3个环境变量。但是,如果我分别在每一行上运行 eval,它就可以工作。
$ eval 'export AWS_ACCESS_KEY_ID="111"'
$ eval 'export AWS_SECRET_ACCESS_KEY="222"'
$ eval 'export AWS_SESSION_TOKEN="333"'
为什么会这样?
【问题讨论】:
-
您在管道时在子shell的环境中设置变量;见BashFAQ 24。
-
@Tony Vu:您打算让我们明确您的要求吗?你的问题解决了还是卡住了?
-
修复BashFAQ #24后,执行脚本将设置三个变量...并退出,新分配的变量会随着它们设置的shell的死亡而消失。
export设置变量会修改 子 进程的环境,而不是父进程。