2015-01-05 2 views
4

Я пытаюсь запустить следующий скрипт из книги Linux Command Line, но я получаю сообщение об ошибке с неожиданным завершением файла. Я поэтапно заполняю каждую функцию, и кажется, что проблема связана с функцией report_home_space(). Однако сценарий выглядит мне хорошо.здесь document - неожиданный конец файла

Любая идея, где проблема?

#!/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_ 

ответ

3

<<- форма здесь документы очень чувствительны к ведущим пропуски. Они допускают только вкладки. Если вы случайно использовали ведущее пространство, или ваш редактор автоматически расширяет вкладки, здесь документ никогда не найдет свой заключительный токен, и это будет учитывать ошибку, которую вы видите.

Если вы хотите сохранить ваш отступы, но хотите альтернатива <<- обозначения, рассмотрим только с помощью echo или printf, например, так:

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... 
+0

Спасибо! Это действительно была ведущая проблема с пробелами в функции report_home_space(). Я удалил ведущие пробелы для всех строк в этом документе для этой функции, а затем использовал только вкладки. – user2300040