CLI 使用本地环境而不是它自己的环境

问题描述 投票:0回答:1

我正在使用 Yandex CLoud CLI 创建虚拟机。

yc compute instance create \
--name demo-1 \
--hostname demo-1 \
--metadata-from-file user-data=startup.sh \
--create-boot-disk image-folder-id=standard-images,image-family=ubuntu-2004-lts \
--zone ru-central1-a \
--network-interface subnet-name=default-ru-central1-a,nat-ip-version=ipv4

我还有

startup.sh
脚本在创建虚拟机时运行:

#!/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

我在期待什么?

Nginx 起始页带有“demo-1”而不是“nginx”标头

我得到了什么?

Nginx 起始页使用我的本地主机名而不是“nginx”!

一些有趣的事情: 当我检查 COM 端口时,我发现主机名已明确定义:

<14>Mar 13 08:30:57 cloud-init: #############################################################
<14>Mar 13 08:30:57 cloud-init: -----BEGIN SSH HOST KEY FINGERPRINTS-----
<14>Mar 13 08:30:57 cloud-init: 1024 SHA256:<content> root@demo-1 (DSA)
<14>Mar 13 08:30:57 cloud-init: 256 SHA256:<content> root@demo-1 (ECDSA)
<14>Mar 13 08:30:57 cloud-init: 256 SHA256:<content> root@demo-1 (ED25519)
<14>Mar 13 08:30:57 cloud-init: 3072 SHA256:<content> root@demo-1 (RSA)
<14>Mar 13 08:30:57 cloud-init: -----END SSH HOST KEY FINGERPRINTS-----
<14>Mar 13 08:30:57 cloud-init: #############################################################

为什么 CLI 在远程服务器上运行时采用本地环境?

nginx command-line-interface yandexcloud
1个回答
0
投票

此问题的出现是由于 YC CLI 版本 0.113 中引入的更改所致。从这个版本开始,通过

--metadata-from-file
参数指定的文件中的环境变量将在本地计算机上执行命令时被替换。因此,
${HOSTNAME}
会替换为您的 本地主机名

要解决此问题,您可以使用双美元符号来转义美元符号:

$${HOSTNAME}
。这可以防止在本地计算机上发生替换,并允许在预期环境中正确解释变量。

© www.soinside.com 2019 - 2024. All rights reserved.