Bagaimana dan mengapa "exec false" menutup terminal?

8

Saya tahu bahwa ini mungkin pertanyaan yang relatif tidak ada gunanya, tetapi saya ingin tahu mengapa exec falsemenutup terminal seperti exithalnya.

Saya juga ingin tahu apakah ini cara yang dapat diterima untuk menutup terminal atau tidak.

Tuan naga
sumber
Juga bacaan yang relevan: Apa perbedaan antara eval dan eksekutif?
Sergiy Kolodyazhnyy

Jawaban:

10

exec falsemengganti shell saat ini dengan eksekusi perintah false(di sini bukan shell builtin tetapi /bin/falseatau apa pun yang falsedapat dieksekusi yang datang terlebih dahulu PATH) yang dengan cepat keluar. Jika shell adalah proses teratas yang berjalan di emulator terminal Anda, tidak ada lagi proses yang berjalan di dalamnya sehingga terminal emulator ditutup.

Ini adalah cara alternatif yang dapat diterima untuk menutup terminal, seperti halnya banyak perintah serupa:

exec true
exec sleep 0
exec echo
...

Lihat juga: what-do-an-exec-command-do

Jlliagre
sumber
Sebagai catatan, bashakan melakukan pembersihan tertentu sebelum memanggil exectermasuk perintah penulisan .bash_history. Jadi, jika seseorang hanya ingin menyimpan .bash_historydan meluncurkan shell baru di jendela terminal yang sama, seseorang dapat melakukannya dengan mengetik exec bash.
kasperd
Ok terima kasih sudah menjawab pertanyaan saya dengan sempurna :)
dragonloverlord
Dan pertanyaan yang bagus! oleh karena itu terunggulkan keduanya! ;)
Fabby
@ jiliagre execmemanggil perintah yang ditemukan PATH, bukan bawaan . Misalnya, exec [[ $USER = root ]]akan mengembalikan bash: exec: [[: not foundkesalahan. Dalam kasus OP, falseyang disebut adalah /bin/false, dan bukan shell built-in. Kalau tidak, jawaban yang bagus, maka +1. Sebagai catatan tambahan, execdapat berupa semacam perintah cut-off, yaitu jika tiga perintah dalam contoh Anda dibuat menjadi skrip, tidak ada yang melebihi yang execakan dicapai, karena execakan menggantikan shell yang dipanggil oleh skrip dengan perintah apa pun yang ada di sebelah kanan dari exec.
Sergiy Kolodyazhnyy