变量未导出

时间:2015-05-12 21:17:54

标签: shell unix

我在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时,我得到一个空值。

1 个答案:

答案 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中运行。