here document - 意外的文件结尾

时间:2015-01-05 00:25:22

标签: bash shell

我一直在尝试从Linux命令行一书中运行以下脚本,但是收到错误意外的文件结尾。我逐步填写每个函数,似乎问题在于函数report_home_space()。不过,这个剧本看起来还不错。

知道问题出在哪里?

#!/bin/bash

# Program to output a system information page

declare -r TITLE="System Information Report for $HOSTNAME"
declare -r CURRENT_TIME=$(date)
declare -r 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 ~/*)</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_

1 个答案:

答案 0 :(得分:3)

此处文档的<<-形式对前导空格非常敏感。他们只允许标签。如果您不小心使用了前导空格或编辑器自动展开了标签,那么此处的文档永远不会找到它的结束标记,这将说明您看到的错误。

如果您想保留缩进,但想要替代<<-表示法,请考虑使用echoprintf,如下所示:

report() {
    printf '<H2>%s</H2>\n<PRE>%s</PRE>\n' "$1" "$2"
}

report_home_space() {
    report 'Home Space Utilization' "$(du -sh ~/*)"
}

# Other reports as above...