syntax error: unexpected end of file
我在运行以下程序时遇到。
#! /bin/bash
# Program to output a system information
TITLE="System Information Report For $HOSTNAME"
CURRENT_TIME="$(date +"%x %r %Z")"
TIMESTAMP="Generated $CURRENT_TIME, by $USER"
report_uptime () {
cat <<- _EOF_
<h2>System Uptime</h2>
<pre>$(uptime)</pre>
_EOF_
return
}
report_disk_space () {
cat <<- _EOF_
<h2>Disk Space Utilization</h2>
<pre>$(df -h)</pre>
_EOF_
return
}
report_home_space () {
cat <<- _EOF_
<h2>Home Space Utilization</h2>
<pre>$(du -sh ~/home/*)</pre>
_EOF_
return
}
cat << _EOF_
<HTML>
<HEAD>
<TITLE>$TITLE</TITLE>
</HEAD>
<BODY>
<h1>$TITLE</h1>
<p>$TIMESTAMP</p>
$(report_uptime)
$(report_disk_space)
$(report_home_space)
</BODY>
</HTML>
_EOF_
cat << _EOF
我在单独的单元中调试它,从始至终都没有错误
me at me in ~/desktop
$ cat << _EOF_
→ <HTML>
→ <HEAD>
→ <TITLE>$TITLE</TITLE>
→ </HEAD>
→ <BODY>
→ <h1>$TITLE</h1>
→ <p>$TIMESTAMP</p>
→ $(report_uptime)
→ $(report_disk_space)
→ $(report_home_space)
→ </BODY>
→ </HTML>
→ _EOF_
<HTML>
<HEAD>
<TITLE>System Information Report For Max-2018.local</TITLE>
</HEAD>
<BODY>
<h1>System Information Report For Max-2018.local</h1>
<p>Generated 04/01/2018 02:46:34 PM CST, by me</p>
</BODY>
</HTML>
此外,如果我删除 shell 函数中的所有命令,也不会有任何错误。
它可能是什么错误?
答案1
使用<<- EOF
运算符时,EOF
分隔符前面必须有制表符仅有的(或位于行的开头),而不是空格。由<space>EOF
或<space><TAB>EOF
不被视为分隔符的行。
在:
... <<- EOF
<TAB>line1
<TAB>line2\
<TAB>continued
<TAB>line3
<TAB>EOF
在查找之前,前导 TAB(上面表示为<TAB>
)将被删除(除了line2
在下一个物理行上继续的逻辑行,在zsh
修复之前的旧版本中除外) 。EOF
因此,在这里,您需要删除_EOF_
分隔符之前的所有空格字符。或者更好的是,<<-
完全避免这种情况,并使用将 the 放在_EOF_
行的开头(确保它不是已关注由空格)。就我个人而言,我不喜欢语法取决于空格数量的语言的想法,这python
也是我不喜欢的主要事情。