如何在bash脚本中为包装器图像设置env变量

时间:2017-11-19 17:37:36

标签: bash eof

我正在尝试用Packer中的Maven和Gradle烘焙AMI。下面是我的json文件。

#!/bin/bash
sudo yum -y update
sudo yum install -y httpd
sudo mkdir -p /usr/local/apache-maven
cd /usr/local/apache-maven
sudo wget http://mirror.olnevhost.net/pub/apache/maven/binaries/apache-maven-3.2.2-bin.tar.gz
sudo tar xvf apache-maven-3.2.2-bin.tar.gz
echo "Maven is installed at usr local apache-maven #maven"
sudo mkdir /opt/gradle
cd /opt/gradle
sudo wget https://services.gradle.org/distributions/gradle-3.4.1-bin.zip
sudo unzip -d /opt/gradle gradle-3.4.1-bin.zip
echo "Gradle is installed at opt gradle #gradle"
cat > set-vars1.sh
export M2_HOME=/usr/local/apache-maven/apache-maven-3.2.2
export M2=$M2_HOME/bin
export PATH=$M2:$PATH
export PATH=$PATH:/opt/gradle/gradle-3.4.1/bin
eval $(./set-vars1.sh)

我无法退出脚本并无法导出变量。如何退出并运行脚本?

我要做的是创建一个带有打包器的AMI实例,我将其作为配置程序编写上述脚本。我能够下载并解压缩maven和gradle但是env变量没有被导出。

所以基本上我想在运行时在实例中设置变量。

2 个答案:

答案 0 :(得分:1)

  1. 您无法退出脚本,因为cat > set-vars1.sh需要标准输入流中的数据。只要您不在命令行提供输入并使用EOF(control-D)进行输入,就不会发生任何事情。
  2. 后续export命令未执行,因为脚本仍然坚持上面的cat命令。

答案 1 :(得分:1)

cat << EOF > set-vars1.sh
export M2_HOME=/usr/local/apache-maven/apache-maven-3.2.2
export M2=$M2_HOME/bin
export PATH=$M2:$PATH
export PATH=$PATH:/opt/gradle/gradle-3.4.1/bin
EOF