Saya bekerja dengan sangat baik melalui William Shotts Jr. Linux Command Line pada sistem Mac OSX 10.7.5 saya. 90% dari linux yang dicakup Shotts cukup dekat dengan Darwin sehingga saya bisa mengetahui atau GTEM untuk mencari tahu apa yang terjadi. Saya sudah sampai di bab 27 tentang "Menulis Skrip Shell" dan mulai membuat "file di sini" dalam suatu fungsi.
Saya mendapat syntax error: unexpected end of file
kesalahan saat saya menyertakan fungsi berikut:
report_uptime () {
cat <<- _EOF_
<H2>System Uptime</H2>
<PRE>$(uptime)</PRE>
_EOF_
return
}
Kesalahan hilang jika saya menggunakan placeholder fungsi berikut:
report_uptime () {
return
}
Juga, di tempat lain dalam skrip, di luar fungsi saya menggunakan cat << _EOF_
format untuk membuat "file di sini" tanpa kesulitan:
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_
Jika ada yang tahu kesalahan saya, saya akan berterima kasih!
linux
macos
shell-script
BenU
sumber
sumber
[-]
adalah opsi untuk file-file Darwin di sini.cat << _EOF_
tidakcat <<- _EOF_
Jawaban:
Jika operator pengalihan adalah ‘& lt; & lt; -’, maka semua karakter tab utama dihapus dari jalur input dan garis yang mengandung pembatas. Hal ini memungkinkan dokumen di dalam skrip shell diindentasikan secara alami.
Jika itu tidak berfungsi seperti yang didokumentasikan, coba pindahkan EOF token ke bagian paling awal dari garis (hapus semua spasi putih).
sumber
-
untuk<<
tidak memecahkan masalah saya, menghapus spasi sebelum_EOF_
melakukan. Mungkin "di sini dokumen" dengancat <<
bekerja di Darwin tetapi tidakcat <<-
. Sayang sekali sejak itu<<-
sangat berguna. Pindahkan komentar Anda ke jawaban Anda dan saya akan menerimanya. Tambahan: bash mungkin sebenarnya rusak. Mungkin rusak oleh saya, mungkin keterbatasan Darwin Mac ...