You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

while循环SSH多服务器获取大页信息返回空结果问题排查

问题产生的核心原因

  • 双引号包裹SSH远程命令导致本地提前解析变量和命令:你用双引号包了要远程执行的内容,所有$开头的变量、反引号包裹的命令都会在执行循环的本地主机(server1)先运行完成,再把结果传给远程主机。cat /proc/meminfo、hostname都是在server1本地执行的,所以返回的主机名永远是server1;算术运算$((...))也在本地提前计算,而你没有在本地提前定义freehugepages变量,最终计算出来的hpfgb是空值,远程执行时自然输出空。
  • SSH命令未指定目标主机:你循环读出来的$HOST变量根本没有传给SSH命令,SSH默认会连接本地主机,这也是所有返回结果都是server1的核心原因之一。

修复后的正确命令

while read -u10 HOST; do 
  ssh -q "$HOST" 'hpfgb=$(( $(grep "HugePages_Free" /proc/meminfo | awk "{print \$NF}") * 2 / 1024 )); echo "$(hostname): Free Huge Pages in GB: $hpfgb"'
done 10< /home/oracle/dbs_group

修复点说明

  • 用单引号包裹远程执行的命令,所有变量、命令替换都会在远程主机执行,不会提前在本地解析
  • 明确把循环读取的$HOST变量传给SSH,指定要登录的远程主机
  • 简化了变量取值逻辑,不需要单独export变量,直接在算术运算里取值即可
  • 内层awk的$NF做了转义,避免和外层语法冲突

内容的提问来源于stack exchange,提问作者codethirst

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 07:06:00