通过 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
我知道标题有点乱,但没办法。
脚本 运行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