Saya sedang menulis Makefile, yang akan mencantumkan semua header yang disertakan oleh file a.cpp, b.cpp, dan c.h. Namun, saya mendapatkan kesalahan EOF yang tidak terduga. Pertanyaan serupa selalu disebabkan oleh terminator baris, seperti mereka menggunakan CRLF alih-alih LF untuk EOL. Namun, editor Teks saya disetel untuk menggunakan LF dan saya memeriksa ulang ini dengan menghapus semua EOL dan menambahkannya kembali. Sayangnya, kesalahan masih tetap ada. Berikut kode-kodenya:
#!/bin/bash
list-header:
for file in a.cpp b.cpp b.h
do
echo "$file includes headers: "
grep -E '^#include' $file | cut -f2
done
Saya mendapat pesan kesalahan ini:
for file in "Bigram.cpp client.cpp Bigram.h"
/bin/sh: -c: line 1: syntax error: unexpected end of file"
Terima kasih sebelumnya atas bantuan apa pun.
1 menjawab
Catatan pertama Anda harus keluar dari $
yang Anda ingin shell untuk melihat, jika tidak make akan memperluasnya sebelum memanggil shell. Namun, masalah utama Anda adalah bahwa setiap baris logis dalam resep make adalah perintah shell yang terpisah. Jadi, aturan ini:
list-header:
for file in a.cpp b.cpp b.h
do
echo "$file includes headers: "
grep -E '^#include' $file | cut -f2
done
Akan menyebabkan make untuk menjalankan perintah shell:
/bin/sh -c 'for file in a.cpp b.cpp b.h'
/bin/sh -c 'do'
/bin/sh -c 'echo "ile includes headers: "'
/bin/sh -c 'grep -E '^#include' ile | cut -f2'
/bin/sh -c 'done'
Anda perlu menggunakan garis miring terbalik untuk "melanjutkan" baris logis melintasi baris baru jika Anda ingin semuanya dikirim ke shell yang sama, dan Anda harus menambahkan titik koma untuk membuatnya berfungsi karena baris baru tidak lagi berfungsi sebagai pembatas perintah:
list-header:
for file in a.cpp b.cpp b.h; \
do \
echo "$$file includes headers: "; \
grep -E '^#include' $$file | cut -f2; \
done
bash
.