ssh - 通过 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
我只是好奇这是否可行。提前谢谢。
解决方案
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
推荐阅读
- flutter - 如何在 Flutter 中检测视频播放器的进度(初始化/结束)?
- python - Karatsuba RecursionError:调用 Python 对象时超出最大递归深度
- java - 如何为 JPanel 创建子面板?
- reactjs - React 的子函数作为函数的正确类型是什么?
- android - 想要使用改造库在服务器上上传多个文件
- android - 我的 BottomNavigationBar 图标超出了屏幕范围
- php - openssl1.1.1 和 php7.2 在握手时发送奇怪的支持协议集
- c# - 发现纹理的特定强度点 - OpenTK
- hive - 在 hive 中导入时的数据验证
- vue.js - Vuetify:带有轮廓的v-text-field不显示边框