Bash 脚本中的环境变量为空

Bash 脚本中的环境变量为空

我有一个正在 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对我有帮助。

相关内容