简单的Bash脚本错误和建议 - 在Linux中保存环境变量

时间:2014-05-09 06:18:28

标签: bash heroku-toolbelt

我正在处理Heroku中托管的项目。该应用程序被硬编码为使用Amazon S3并在环境变量中查找键。这是我在看了一些例子之后写的,我不确定它为什么不起作用。

echo $1
if [ $1 != "unset" ]; then
        echo "set"
        export AMAZON_ACCESS_KEY_ID=XXXXXXXXXXXX
        export AMAZON_SECRET_ACCESS_KEY=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
        export S3_BUCKET_NAME=XXXXXXXXX
else
        echo "unset"
        export AMAZON_ACCESS_KEY_ID=''
        export AMAZON_SECRET_ACCESS_KEY=''
        export S3_BUCKET_NAME=''
fi

运行脚本时,它会转到set部分。但是在通过echo $AMAZON_ACCESS_KEY_ID # => ''检查时。

我不确定是什么导致了这个问题。 我会对...感兴趣

  1. 解决此问题......
  2. 一种以更简单的方式在env中提取和添加heroku config变量的方法。

1 个答案:

答案 0 :(得分:1)

您需要source脚本,而不是像孩子一样运行它。如果直接运行脚本,它的环境会在结束时消失。获取脚本会导致它在当前环境中执行。 help source了解更多信息。

示例:

$ VAR=old_value

$ cat script.sh
#!/bin/bash
export VAR=new_value

$ ./script.sh
$ echo $VAR
old_value

$ source script.sh
$ echo $VAR
new_value

使用source执行的脚本不需要执行,也不需要" shebang" line(#!/bin/bash)因为它们作为单独的进程运行。实际上,为了避免它们作为命令运行,最好不要使它们可执行,因为它不会按预期工作。