我有一个正在 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()
)
基本测试
#!/bin/bash
echo "s/enterpagerdutyapikey/${PAGERDUTYAPIKEY}/g" > path.txt
但是,当我运行它时,它path.txt
会出现如下回显:
s/enterpagerdutyapikey//g
但是当我在服务器上 ssh 并运行相同的 bash 脚本时,它会回显如下:
s/enterpagerdutyapikey/mykey/g
知道为什么$PAGERDUTYAPIKEY
当我运行用户数据时环境变量呈现为空吗?
答案1
来自 StackOverflow 帖子https://stackoverflow.com/questions/70423727/environment-variable-empty-in-bash-script
正如@chepner所回答的,出于安全原因,sudo默认不保留任意环境变量。因此,从命令中删除sudo对我有帮助。