3

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

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

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

4

3 回答 3

2

如果你想在你的 中添加这样的缩进here-doc,你应该添加-如下代码:

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

复制粘贴时要小心,有时您可能会对制表符或空格感到惊讶。

于 2012-10-08T21:32:45.507 回答
1

解决方案是在脚本的第 1 列中添加文字标签。tl;dr 文字标签 (EOF) 没有缩进

于 2012-10-08T21:47:47.447 回答
1

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

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

结束限制字符串,在 here 文档的最后一行,必须从第一个字符位置开始。不能有前导空格。限制字符串后的尾随空格同样会导致意外行为。空格可防止限制字符串被识别。

于 2012-10-08T21:29:29.017 回答