在循环中使用ssh执行脚本

时间:2012-06-23 20:44:02

标签: bash ssh

我正在尝试编写一个脚本,我有一个循环登录到多个远程计算机并在每台计算机内执行脚本。这是一个例子:

for ((j=1; j < 2; j++)); do 

  mchname="n"$j

  ssh -T $mchname <<'ENDSSH'    
    ./run_script < input > output &    
  ENDSSH

done

每当我尝试执行上面的脚本时,我得到: “警告:此处 - 文件在第37行由文件结尾分隔(想要”ENDSSH“)”

我是ssh的新手,所以我确信我犯了一个愚蠢的错误。谁能建议我一个解决方案? 感谢。

1 个答案:

答案 0 :(得分:13)

您的bash脚本中存在问题。无法缩进heredoc结束标记(脚本中的ENDSSH)。

请改为尝试:

  ssh -T $mchname <<'ENDSSH'    
    ./run_script < input > output &    
ENDSSH
# ^ no indentation for that line

修改

此外,您可以通过将其作为参数传递给ssh来运行远程系统上的命令,而不是将其作为标准输入提供。该命令将由用户的远程shell执行:

ssh -T $mchname './run_script < input > output &'