【问题标题】:How do I parse the remote server name inside echo when executing over ssh通过 ssh 执行时如何解析 echo 中的远程服务器名称
【发布时间】:2018-11-19 19:44:59
【问题描述】:

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

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

echo " 检查 $hostname"echo " 检查 ${hostname}" 什么都不返回。 echo " checks $(hostname)" 讽刺地返回本地服务器的主机名。

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

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

【问题讨论】:

    标签: ssh echo eof hostname


    【解决方案1】:

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

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

    echo " checks $(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
    

    【讨论】:

    • 哇,很棒的答案,谢谢。并不是说我是 Bash-Guru,但我有一种感觉,无论你学了多少,bash 仍然是一个谜……干杯,Dimi
    猜你喜欢
    • 2013-11-22
    • 1970-01-01
    • 2018-01-12
    • 2012-07-25
    • 1970-01-01
    • 1970-01-01
    • 2016-11-27
    • 2016-12-17
    • 1970-01-01
    相关资源
    最近更新 更多