Linux
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() )
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 對我有幫助。