Linux

Bash 腳本中的環境變數為空

  • January 9, 2022

我有一個在 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 對我有幫助。

引用自:https://serverfault.com/questions/1087815