我在shell脚本中运行以下简单代码,但似乎无法导出变量:
#!/bin/bash
echo -n "Enter AWS_ACCESS_KEY_ID: "
read aws_access_key
export AWS_ACCESS_KEY_ID=$aws_access_key
之后我从用户那里获取输入,但是当我运行echo $ AWS_ACCESS_KEY_ID时,我得到一个空值。
答案 0 :(得分:3)
使用以下命令在当前shell中运行脚本:
source your-script # this runs your-script in the existing shell
...或者,如果使用POSIX shell ......
. your-script # likewise; that space is intentional!
不
./your-script # this starts a new shell just for `your-script`; its variables
# are lost when it exits!
...如果你想要变量,它设置为可以调用它的shell。
要明确,export
将变量放在当前进程的环境中 - 但环境变量会向下传播到子进程,而不是父进程。
现在,如果您的目标是定义一个易于调用的交互式命令,您可能需要完全考虑一种完全不同的方法 - 在.bashrc
中添加一个函数:
awsSetup() {
echo -n "Enter AWS_ACCESS_KEY_ID: "
read && [[ $REPLY ]] && export AWS_ACCESS_KEY_ID=$REPLY
}
...之后,.bashrc
中包含此内容的用户可以运行awsSetup
,这将在当前shell中运行。