通过 ssh 执行时如何解析 echo 中的远程服务器名称

How do I parse the remote server name inside echo when executing over ssh

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

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

echo "正在检查 $hostname"echo "正在检查 ${hostname}" returns 什么都没有。 echo " 检查 $(hostname)" returns 具有讽刺意味的是本地服务器的主机名。

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

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

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

这是意料之中的。通常不存在名为 hostname 的变量,因此您不会期望得到结果。然而,有一个 HOSTNAME 变量,但这只是问题的一半。

echo " checking $(hostname)" returns the hostname of the local server ironically.

那是因为当您使用 "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