我有一个在 AWS 上部署的 EC2 实例。
我正在使用 Amazon Linux 2,并且我正在将用户数据传递给它:
userdata_file.write(
f'''
#!/bin/bash\n
export PAGERDUTYAPIKEY='mykey'\n
sudo yum install git -y\n
chmod +x ./basic_test.sh \n
echo $PAGERDUTYAPIKEY> /home/ec2-user/pagerdutyapikey1.txt\n
sudo ./basic_test.sh
'''.strip()
)
basic_test.sh
#!/bin/bash
echo "s/enterpagerdutyapikey/${PAGERDUTYAPIKEY}/g" > path.txt
但是,当我运行它时,path.txt
它会像这样回显:
s/enterpagerdutyapikey//g
但是当我在服务器中 ssh 并运行相同的 bash 脚本时,它会这样回显:
s/enterpagerdutyapikey/mykey/g
知道为什么$PAGERDUTYAPIKEY
当我运行用户数据时环境变量呈现为空吗?
从 StackOverflow 发布帖子https://stackoverflow.com/questions/70423727/environment-variable-empty-in-bash-script
正如@chepner 回答的那样,出于安全原因,默认情况下 sudo 不会保留任意环境变量。所以从命令中删除 sudo 对我有帮助。