有人可以解释为什么文件末尾在第 49 行是意外的吗?(第 49 行是最后一行之后的一行)
#!/bin/bash
timeend=$(date -u +%H%M)
timestart=$(date --date "$timeend 30 minutes ago" -u +%H%M)
firsttime=0
while true
do
if [[ $firsttime -eq 0 ]]; then
time=$timestart
increment=0
fi
if [[ $firsttime -ne true ]]; then
increment=$(( $increment + 2 ))
time=$(( $timestart + $increment ))
fi
if [[ $time -ge $timeend ]]; then
break
fi
gpnids << EOF
RADFIL = NEXRIII|CLT|TR0
RADTIM = "$time"
TITLE = 1/-2
PANEL = 0
DEVICE = gif|radar"$increment".gif|1280;1024|C
CLEAR = Y
TEXT = 1/2/2/hw
COLORS = 7
WIND =
LINE =
CLRBAR =
IMCBAR = 5/v/LL/.005;.6/.4;.01
GAREA = dset
MAP = 24 + 23 + 1/1/2 + 14 + 15/1/2
LATLON = 0
OUTPUT = t
$mapfil = lorvus.usg + hicnus.nws + hipona.nws + louhus.nws + loisus.nws
run
exit
EOF
firsttime=1
gpend
done
您还应该得到另一个错误,该错误可能提供更多信息:
你的错误是你在结束 heredoc 的字符串之前有空格。举一个简单的例子,这抱怨:
但这不是:
我得到两行应该可以帮助你弄清楚发生了什么:
您的
heredoc
(<< EOF
) 构造不正确。它对空格敏感,因此您可以将其剥离:或者让它知道你正在用 tab 键(它必须是一个 tab键):
我更喜欢第二个,因为它可以让您更好地构建脚本......您的脚本已经可以从中受益。
文件结束警告
EOF
这可以通过删除空格来解决,或者正如Terndon 指出的那样使用制表符——我不知道这个
其他
文件结尾错误的另一个常见错误是处理空白问题。通常从在线复制适用于 Windows 的格式化代码并在 Linux 中运行。
这可以通过
dos2unix
在文件上运行以快速转换这些字符来解决。如果您使用的是 vim 或 vi,请尝试使用以下命令
您将能够看到符号之间的空格
$
有时找出一些意想不到的行为会派上用场。
在这种情况下,删除空格完成了作业。