使用shell脚本远程运行本地脚本文档

时间:2012-10-08 21:18:21

标签: bash shell unix ssh

我需要远程运行脚本。我使用以下shell脚本

    for server in $servers
     do
     LOCAL_VAR=<some_value>
     ssh $server <<EOF
      command1 $LOCAL_VAR
      command2..
      ..
      exit
      EOF
    done

bash显示意外的文件结束语法错误。如果我删除此块,其余代码工作正常。能告诉我远程执行脚本的正确方法吗?

3 个答案:

答案 0 :(得分:2)

如果您想在here-doc中添加这样的缩进,则应添加-,例如以下代码:

for server in $servers
do
    LOCAL_VAR=<some_value>
    ssh $server <<-EOF
    command1 $LOCAL_VAR
    command2..
    ..
    exit
    EOF
done

复制粘贴时请小心,有时您可能会对标签或空格感到惊讶。

答案 1 :(得分:1)

关闭heredoc的EOF不得有任何前导空格。在找到脚本结束之前,Bash认为它没有到达字符串的末尾。

http://tldp.org/LDP/abs/html/here-docs.html

  

此处文档最后一行的结束限制字符串必须从第一个字符位置开始。没有领先的空白。限制字符串后跟踪空格同样会导致意外行为。空格可以防止限制字符串被识别。

答案 2 :(得分:1)

解决方案是在第1列中使用文字标签。 tl; dr没有缩进文字标签(EOF)