首页 > 解决方案 > 通过 ssh 执行时如何解析 echo 中的远程服务器名称

问题描述

我知道标题有点混乱,但没有其他办法。

脚本运行并通过 ssh 连接到远程服务器。这将在 500 台服务器上运行,这就是为什么我希望在控制台上有这样的输出。

echo "检查 $hostname"echo "检查 ${hostname}"不返回任何内容。 echo "checking $(hostname)"讽刺地返回本地服务器的主机名。

ssh $Server /bin/bash <<EOF
install some software
echo "checking <remote-server-name> after installation"
java -version
groovy -v
jruby -v
EOF

我只是好奇这是否可行。提前谢谢。

标签: sshechoeofhostname

解决方案


echo " checking $hostname" or echo " checking ${hostname}" returns nothing.

这是意料之中的。通常没有这样的变量 named hostname,所以你不会期望结果。然而,有一个HOSTNAME变量,但这只是问题的一半。

echo "checking $(hostname)" 讽刺地返回本地服务器的主机名。

那是因为当您使用“here”文档时,如

somecommand << EOF
...
EOF

在将输入馈送到您的命令之前,将对此处文档的内容进行变量扩展评估。这正是$(hostname)构造hostname在本地系统上执行命令的原因。

您可以通过用单引号引用结束标记来禁止对此处文档的评估,如下所示:

ssh $Server /bin/bash <<'EOF'
install some software
echo "checking $HOSTNAME after installation"
java -version
groovy -v
jruby -v
EOF

推荐阅读