syntax error: unexpected end of file
次のプログラムを実行すると、この問題が発生しました。
#! /bin/bash
# Program to output a system information
TITLE="System Information Report For $HOSTNAME"
CURRENT_TIME="$(date +"%x %r %Z")"
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 ~/home/*)</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_
cat << _EOF
別のデバイスでデバッグしましたが、全体の時間にエラーがありませんでした。
me at me in ~/desktop
$ 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_
<HTML>
<HEAD>
<TITLE>System Information Report For Max-2018.local</TITLE>
</HEAD>
<BODY>
<h1>System Information Report For Max-2018.local</h1>
<p>Generated 04/01/2018 02:46:34 PM CST, by me</p>
</BODY>
</HTML>
また、シェル関数からすべてのコマンドを削除してもエラーはありません。
どのようなエラーがありますか?
答え1
<<- EOF
演算子を使用する場合は、EOF
区切り文字の前にタブ文字を含める必要があります。ただ(または行の先頭に)スペースの代わりに。区切り文字で構成または<space>EOF
処理され<space><TAB>EOF
ない行。
存在する:
... <<- EOF
<TAB>line1
<TAB>line2\
<TAB>continued
<TAB>line3
<TAB>EOF
<TAB>
前のTAB(上記に示されている)は照会の前に削除されます(変更前の以前のバージョンを除いて、次の物理行line2
から続く論理行は除く)。zsh
EOF
_EOF_
したがって、ここでは区切り文字の前にあるすべての空白文字を削除する必要があります。あるいは、より良い方法は、<<-
これを完全に避け、次を使用して_EOF_
行の先頭に置くことです。すでにフォロー中スペースで)。個人的には、私は空白の数によってフレーズが変わる言語というアイデアが好きではなく、python
それが私が一番好きではないということです。