【问题标题】:Running local script remotely with shell script here documents使用 shell 脚本远程运行本地脚本 here 文档
【发布时间】:2012-09-29 04:05:06
【问题描述】:

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

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

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

【问题讨论】:

  • 您的EOF 缩进了吗?不应该。
  • 是的。 sputnick 的解决方案效果很好

标签: bash shell unix ssh


【解决方案1】:

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

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

复制粘贴时要小心,有时制表符或空格会让人感到意外。

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

    • 有趣。我不知道。
    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-11-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多