詳しく調べると、「構文エラー:予期しないファイルの終わり」が報告されます。

詳しく調べると、「構文エラー:予期しないファイルの終わり」が報告されます。

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から続く論理行は除く)。zshEOF

_EOF_したがって、ここでは区切り文字の前にあるすべての空白文字を削除する必要があります。あるいは、より良い方法は、<<-これを完全に避け、次を使用して_EOF_行の先頭に置くことです。すでにフォロー中スペースで)。個人的には、私は空白の数によってフレーズが変わる言語というアイデアが好きではなく、pythonそれが私が一番好きではないということです。

おすすめ記事