我需要远程运行脚本。我正在使用以下外壳脚本
for server in $servers
do
LOCAL_VAR=<some_value>
ssh $server <<EOF
command1 $LOCAL_VAR
command2..
..
exit
EOF
done
bash 显示意外的文件语法结束错误。如果我删除此块,其余代码可以正常工作。你能告诉我远程执行脚本的正确方法吗?
如果要在here-doc
中放置这样的缩进,则应添加类似于以下代码的-
:
for server in $servers
do
LOCAL_VAR=<some_value>
ssh $server <<-EOF
command1 $LOCAL_VAR
command2..
..
exit
EOF
done
复制粘贴时要小心,有时您可能会对制表符或空格感到惊讶。
关闭 heredoc 的 EOF 不得有任何前导空格。Bash 认为在找到脚本结尾之前它已经到达字符串的末尾。
http://tldp.org/LDP/abs/html/here-docs.html
此处文档最后一行的结束限制字符串必须从第一个字符位置开始。不能有前导空格。限制字符串后面的尾随空格同样会导致意外行为。空格可防止识别限制字符串。
解决方案是在脚本的第 1 列中使用文本标签。tl;dr 文字标签 (EOF) 无缩进