Apakah CTRL + C salah digunakan untuk kembali ke baris perintah?

27

Ketika saya menggunakan tail -fdan saya ingin kembali ke shell, saya selalu menggunakan CTRL+C. Atau ketika saya mengetik perintah dan merasa ingin membatalkannya dan memulai lagi, saya hanya CTRL+Cperlu kembali ke prompt baris perintah kosong. Apakah ini dianggap praktik buruk? Terkadang saya merasa mungkin ada cara yang lebih baik untuk melepaskan diri dari sesuatu, tetapi benar-benar tidak tahu.

Pasang kembali Monica
sumber
6
Untuk membatalkan perintah shell yang dimasukkan sebagian, Anda dapat menggunakan Control-U atau Delete (tergantung pada pengaturan tty dan binding kunci Anda), tetapi tidak ada yang salah dengan menggunakan Control-C.
Keith Thompson
@KeithThompson terima kasih untuk Ctrl + U, saya tidak menyadari yang itu :-)
Patrick
Sebagai catatan, Cu tidak benar-benar membatalkan perintah yang dimasukkan, ia memindahkannya ke buffer tempel (mirip dengan fungsionalitas "cut" dari beberapa program).
Chris Down

Jawaban:

36

Ctrl+ Cmengirimkan SIGINT ke program. Ini memberi tahu program bahwa Anda ingin mengganggu (dan mengakhiri) prosesnya. Sebagian besar program menangkap ini dengan benar dan keluar dengan rapi. Jadi, ya, ini adalah cara yang "benar" untuk mengakhiri sebagian besar program.

Ada cara pintas keyboard lain untuk mengirim sinyal lain ke program, tetapi ini adalah yang paling umum.

Chris S
sumber
9
Ada juga Ctrl + D untuk program yang membaca input dari pengguna. Ctrl + D menutup STDIN ke program. Untuk keluar dari shell dengan anggun ini juga tersedia (sama persis dengan mengetik keluar).
Patrick
2
@ Patrick Ctrl + D benar-benar mengirim indikator End of File ke stream. Terserah program untuk merespons dengan tepat (biasanya menutup aliran file).
Chris S
Itulah yang dilakukan penutupan STDIN. Anda tidak bisa mendapatkan EOF tanpa pipa / aliran ditutup.
Patrick
9
Salah dalam tiga hal, Patrick. Pertama: Kontrol + D tidak memiliki arti ini untuk pipa. Kedua: karakter khusus EOF tidak menutup apa pun. Ini menyebabkan pengembalian satu kali nol byte (dengan anggapan bahwa buffer baris kosong) dari read()panggilan sistem saat ini . Yang berikutnya read()tidak terpengaruh. Ketiga: Tidak satu pun dari ini berlaku untuk program-program yang menempatkan disiplin garis ke dalam mode non-kanonik, seperti kebanyakan program shell dari beberapa dekade terakhir dan memang program lain yang menggunakan perpustakaan seperti GNU readline.
JdeBP
13

Metode ini baik-baik saja, sungguh.

Sven
sumber
11

Untuk membatalkan perintah panjang saat mengetik, saya terkadang melompat ke awal baris, dan menyisipkan tanda komentar, sebelum menekan enter:

Home#Enter

Pos1#Return

Ini berguna, jika saya mengetikkan perintah salin dengan jalur panjang, misalnya, dan sementara itu mengamati, bahwa saya pertama-tama perlu membuat direktori, tetapi ingin mengulangi perintah setelahnya. Maka saya hanya harus mengambilnya dari histori, menghapus hash, dan memasukkannya.

Di Bash, Anda bisa menggunakan pintasan

Alt+#

untuk mengomentari perintah Anda, sebagaimana ditunjukkan dalam komentar (Terima kasih, @Zorawar).

Pengguna tidak diketahui
sumber
6
Anda juga dapat menggunakan Ctrl-Atanpa melepas jari dari deretan rumah.
Dietrich Epp
1
Dan Ctrl-Epergi ke akhir, omong-omong.
Dave
@ Dave: Itu benar, tetapi Anda tidak perlu pindah ke akhir untuk menekan enter, untuk mengkonfirmasi perintah Anda. Baris perintah bukan editor, di mana ini mungkin menyisipkan baris baru.
pengguna tidak diketahui
2
Dalam bash, Anda dapat mencapai hal yang sama hanya dengan menekan Alt-#: itu akan memasukkan komentar dan menjalankan perintah (jadi masukkan dalam sejarah Anda).
Zorawar
8

Secara umum, menggunakan Ctrl+ Ctidak masalah ketika program tidak menawarkan cara interaktif untuk mengakhiri (baik dengan desain, atau, lebih sering, karena telah membeku atau menjadi tidak dapat digunakan). Hanya perlu diingat bahwa, ketika dalam mode interaktif, kombo kunci yang Anda inginkan mungkin Ctrl+ D, yang mengirim EOF, menandakan akhir dari input.

Zorawar
sumber
1

Jika menggunakan Bash, seseorang juga dapat menggunakan Ctrl- Z, dan mengetik bguntuk "meletakkan pekerjaan saat ini di latar belakang".

Komputis
sumber
0

Seperti @Patrick katakan dalam komentar pada jawaban yang diterima,

Ada juga Ctrl+Duntuk program yang membaca input dari pengguna. Ctrl+Dmenutup STDIN ke program.

Ini membantu saya ketika Ctrl+Ctidak berhasil mendapatkan kembali baris perintah setelah menggunakan>>

enharmonic
sumber