使用Yandex Cloud CLI创建VM时启动脚本调用本地环境变量异常
问题原因与解决方案
问题根源
你启动脚本里的${HOSTNAME}使用了双引号包裹,执行yc命令时,本地Shell会优先解析双引号内的环境变量,把你本地机器的HOSTNAME值替换进去,再将替换后的脚本内容上传到Yandex Cloud的VM中。所以VM实际执行的脚本里已经是你本地的主机名,而非VM自身的HOSTNAME环境变量。
解决方案
有两种方式避免本地Shell提前解析变量:
- 将包裹
sed命令的双引号改为单引号:单引号内的变量不会被本地Shell解析,会原封不动传递到VM,由VM的Shell在执行时解析。 - 转义变量中的
$符号:写成\${HOSTNAME},让本地Shell把$当作普通字符处理。
修正后的启动脚本(方式1:单引号)
#!/bin/bash apt-get update apt-get install -y nginx service nginx start sed -i -- 's/nginx/Yandex Cloud - ${HOSTNAME}/' /var/www/html/index.nginx-debian.html
修正后的启动脚本(方式2:转义$)
#!/bin/bash apt-get update apt-get install -y nginx service nginx start sed -i -- "s/nginx/Yandex Cloud - \${HOSTNAME}/" /var/www/html/index.nginx-debian.html
另外注意你原脚本末尾的EOF是多余内容,需要删除,否则脚本执行时会触发语法错误。
内容的提问来源于stack exchange,提问作者DeBug
相关产品推荐
相关产品推荐

