2016-01-12 35 views
1

我正在尝试查找哪里可能存在不匹配的标记或引号,但它正在逃避我。我收到的错误是第48行的意外EOF,它只告诉我我已经知道了什么。这是我简单的脚本:Shell:意外的文件结尾

#!/bin/bash 

# Program to output a system information page 

TITLE="System Information for $HOSTNAME" 

CURRENT_TIMESTAMP=$(date +"%x %r %Z") 
TIME_STAMP="Generated $CURRENT_TIMESTAMP, 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>$TIME_STAMP</P> 
       $(report_uptime) 
       $(report_disk_space) 
       $(report_home_space) 
     </BODY> 
</HTML> 
_EOF_ 
+0

'_EOF_'是否缩进实际的制表符?如果他们不是,那么bash不会兑现他们。用空格缩进意味着bash将永远不会看到_EOF_终止符并在脚本的末尾运行。请参阅:http://unix.stackexchange.com/questions/76481/cant-indent-heredoc-to-match-nestings-indent –

+0

我认为我有我的tabstops设置为4空格,而不是由于Python的选项卡,但我以为“ - 否定了这个? – flybonzai

+2

是的,但缩进必须使用实际的选项卡。空间,你的编辑,对待,作为选项卡将无法正常工作。 bash不会关心你使用的编辑器,它只能看到文件中的内容,文件中的内容必须是实际的选项卡字符(ascii 9)而不是空格(ascii 32)。 '<< - '允许缩进终止符,但不会奇迹般地使空格作为缩进字符。 –

回答

1

你可能会用空格代替制表符< < - 不带空格的工作。

相关问题