Apakah Anda benar-benar "mengakhiri file" dengan memasukkan urutan melarikan diri ini, yaitu apakah sesi shell interaktif dilihat sebagai aliran file nyata oleh shell, seperti aliran file lainnya? Jika demikian, file mana?
Atau, apakah sinyal Ctrl+ Dhanya placeholder yang berarti "pengguna telah selesai memberikan input dan Anda dapat mengakhiri"?
shell
escape-characters
Geeb
sumber
sumber
set -o ignoreeof
untuk mengubah perilaku itu.Jawaban:
The
^D
karakter (juga dikenal sebagai\04
atau 0x4, AKHIR TRANSMISI di Unicode) adalah nilai default untukeof
parameter karakter kontrol khusus dari terminal atau pengemudi pseudo-terminal di kernel (lebih tepatnya daritty
disiplin baris melekat pada serial atau pseudo perangkat tty ). Itulahc_cc[VEOF]
yangtermios
struktur dilewatkan ke TCSETS / TCGETSioctl
salah satu isu ke perangkat terminal untuk mempengaruhi perilaku pengemudi.Perintah khas yang mengirim itu
ioctls
adalahstty
perintah.Untuk mengambil semua parameter:
Itu
eof
parameter hanya relevan bila perangkat terminal diicanon
modus.Dalam mode itu, driver terminal (bukan emulator terminal) mengimplementasikan editor baris yang sangat sederhana , di mana Anda dapat mengetik Backspaceuntuk menghapus karakter, Ctrl-Uuntuk menghapus seluruh baris ... Ketika aplikasi membaca dari perangkat terminal, ia tidak melihat apa pun hingga Anda menekan Returnpada titik mana
read()
mengembalikan garis penuh termasukLF
karakter terakhir (secara default, driver terminal juga menerjemahkan yangCR
dikirim oleh terminal Anda ReturnkeLF
).Sekarang, jika Anda ingin mengirim apa yang Anda ketikkan sejauh ini tanpa menekan Enter, di situlah Anda dapat memasukkan
eof
karakter. Setelah menerima karakter itu dari emulator terminal, driver terminal mengirimkan konten baris saat ini, sehingga aplikasi yang melakukan halread
itu akan menerimanya apa adanya (dan itu tidak akan menyertakanLF
karakter tambahan).Sekarang, jika baris saat ini kosong, dan asalkan aplikasi akan sepenuhnya membaca baris yang dimasukkan sebelumnya,
read
akan mengembalikan 0 karakter.Itu menandakan akhir file ke aplikasi (ketika Anda membaca dari file, Anda membaca sampai tidak ada lagi yang bisa dibaca). Itu sebabnya ini disebut
eof
karakter, karena mengirimkannya menyebabkan aplikasi melihat bahwa tidak ada lagi input yang tersedia.Sekarang, shell modern, pada prompt mereka tidak mengatur terminal dalam
icanon
mode karena mereka mengimplementasikan editor baris mereka sendiri yang jauh lebih maju daripada driver terminal built-in. Namun, dalam editor baris mereka sendiri , untuk menghindari membingungkan para pengguna, mereka memberikan^D
karakter (atau apa pun pengaturan terminaleof
dengan beberapa) makna yang sama (untuk menandakaneof
).sumber
CTRL_D hanyalah sinyal yang mengatakan bahwa ini adalah akhir dari aliran teks. Anda tidak mengakhiri file dengan itu, Anda mengakhiri aliran input Anda dengan mengetiknya. CTRL_D juga tidak mendukung karakter atau byte apa pun karena Anda dapat mengetahuinya dengan hexdump alat:
sumber