我需要远程运行脚本。我使用以下shell脚本
for server in $servers
do
LOCAL_VAR=<some_value>
ssh $server <<EOF
command1 $LOCAL_VAR
command2..
..
exit
EOF
done
bash显示意外的文件结束语法错误。如果我删除此块,其余代码工作正常。能告诉我远程执行脚本的正确方法吗?
答案 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)