脚本编写新手。通过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_
答案 0 :(得分:4)
Bash手册页说明了这里的文件(重点补充):
这种类型的重定向指示shell从当前源读取输入,直到包含 [分隔符]的行( 没有尾随)看到空白 )。然后,读取到该点的所有行都将用作命令的标准输入。
[...]
如果重定向运算符为
<<-
,则从输入行和包含[分隔符]的行中删除所有前导制表符。
我通过打开要编辑的问题来查看代码中的文字空格。假设所呈现的代码准确反映了您的实际脚本,包括空格,那么您的问题就是在包含此类文档的结束分隔符的行上的尾随空格。