我的一些bash脚本中的doc分隔符被跳过了

时间:2017-01-10 15:33:39

标签: bash ubuntu heredoc

脚本编写新手。通过Shotts的“Linux命令行”工作。

我一直遇到一些问题,其中一些此类文档分隔符被跳过。

我当前已将report_uptime和report_disk_space注释掉,但当我取消注释时,我的某些文档分隔符将被跳过。

我只是错过了一些明显破坏剧本的东西,或者我是否以某种方式抬高了这里的文档?

#!/bin/bash

# Program to output a system information page

##### Constants

TITLE="System Information Report For $HOSTNAME"
CURRENT_TIME=$(date +"%x %r %Z")
TIME_STAMP="Generated $CURRENT_TIME, by $USER"

##### Functions

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
#}

##### HTML code

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_

1 个答案:

答案 0 :(得分:4)

Bash手册页说明了这里的文件(重点补充):

  

这种类型的重定向指示shell从当前源读取输入,直到包含 [分隔符]的行( 没有尾随)看到空白 )。然后,读取到该点的所有行都将用作命令的标准输入。

     

[...]

     

如果重定向运算符为<<-,则从输入行和包含[分隔符]的行中删除所有前导制表符。

我通过打开要编辑的问题来查看代码中的文字空格。假设所呈现的代码准确反映了您的实际脚本,包括空格,那么您的问题就是在包含此类文档的结束分隔符的行上的尾随空格。