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

编写Bash脚本:将远程设备命令结果输出至本地文本文件

修正后的多设备远程命令执行脚本

原脚本存在几处语法和逻辑问题,以下是问题点和修正后的完整实现:

原脚本问题梳理

  • Shebang语法错误,正确写法应为#!/bin/bash
  • 数组定义错误,Bash数组需用圆括号()而非大括号{}
  • 循环语句错误,遍历设备需用for而非if
  • 远程命令传递错误,多条命令需用引号包裹,避免被本地Shell提前解析
  • 未捕获错误输出,默认仅标准输出存入文件,错误信息会直接打印在本地终端

修正后的脚本

#!/bin/bash

# 定义目标设备数组
devices=(host1 host2)

# 定义要执行的远程命令(双引号包裹确保完整传递给远程主机)
commands="command1; command2; command3"

# 遍历每台设备执行操作
for i in "${devices[@]}"; do
    echo "正在处理主机: ${i}"
    # 同时捕获标准输出和错误输出到本地文件
    ssh "${i}" "${commands}" > "${i}_output.txt" 2>&1
    echo "-------------------------------------------------------------"
done

关键修改说明

  • 修正Shebang:确保脚本由Bash解释执行
  • 数组规范:用()声明设备列表,"${devices[@]}"可兼容带空格的主机名
  • 命令包裹:双引号包裹命令串,保证ssh将完整命令传递给远程主机执行
  • 错误捕获:2>&1将标准错误重定向到标准输出,让错误信息也能存入输出文件
  • 循环语法:用for循环正确遍历设备数组

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 00:25:57