Hapus / hapus kata sandi tak terlihat yang salah ketik pada shell / terminal di Linux


75

Satu hal yang mengganggu saya menggunakan terminal Linux adalah ketika saya harus mengetikkan kata sandi yang tidak terlihat, seperti ketika Anda menjalankan ssh . Kadang-kadang saya salah ketik satu atau lebih huruf dan kemudian saya harus menekan tombol backspace beberapa kali untuk memastikan bahwa saya menghapus semuanya untuk memulai lagi.

Saya tahu ini bukan masalah besar tetapi karena di hari lain saya menemukan bahwa menekan CTRL + L "membersihkan" terminal saya bertanya-tanya apakah ada cara untuk menghapus / menghapus kata sandi yang tidak terlihat tanpa mengandalkan backspace atau menekan tombol enter untuk coba lagi.

Jawaban:


70

Anda cukup mengetik ctrl+ u.

Nikmati =)


Tidak pernah tahu tentang itu. Biasanya saya hanya ctrl + C dari perintah mid-mengetik yang tidak diinginkan.
Spidey

10
Lihat penjelasan saya di jawaban lain jika Anda ingin tahu apa yang terjadi.
Jim Paris

Saya menggunakan Ctrl + W dan cukup OK dengan itu.
shabunc

108

Saya tahu ini sudah dijawab, tetapi jawabannya tidak menjelaskan apa yang terjadi.

Karakter seperti Ctrl+ Lditangani oleh aplikasi . Dalam hal memasukkan input ke dalam shell, seperti bash, itu membersihkan layar. Beberapa aplikasi, seperti emacs, menggunakannya untuk menggambar ulang layar dan / atau memasukkan kembali kursor.

Karakter seperti Ctrl+ Upada prompt kata sandi ditangani oleh disiplin garis TTY . Mereka akan bekerja kapan saja terminal input berada dalam mode pengeditan baris "kanonik", yang merupakan mode apa program Anda saat Anda memasukkan kata sandi. Dalam mode ini, itu adalah kernel Linux sendiri yang menafsirkan karakter ini. Anda dapat melihat fungsi apa yang ditugaskan pada kunci mana dalam output dari stty -a:

speed 38400 baud; rows 45; columns 128; line = 0;
intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol = <undef>; eol2 = <undef>; swtch = <undef>; start = ^Q; stop = ^S;
susp = ^Z; rprnt = ^R; werase = ^W; lnext = ^V; flush = ^O; min = 1; time = 0;
-parenb -parodd cs8 -hupcl -cstopb cread -clocal -crtscts
-ignbrk -brkint -ignpar -parmrk -inpck -istrip -inlcr -igncr icrnl ixon -ixoff -iuclc -ixany -imaxbel iutf8
opost -olcuc -ocrnl onlcr -onocr -onlret -ofill -ofdel nl0 cr0 tab0 bs0 vt0 ff0
isig icanon iexten echo echoe echok -echonl -noflsh -xcase -tostop -echoprt echoctl echoke

Di sini, Anda dapat melihat bahwa Ctrl+ Uterkait dengan kill, yang (menurut halaman manual stty ) akan "menghapus baris saat ini". Anda juga dapat menggunakan sttyuntuk mengubah pemetaan ini:

stty kill ^E   # make ctrl-e erase the line

Halaman ini memiliki banyak informasi hebat tentang lapisan TTY jika Anda tertarik.


Jika hal-hal yang tidak cukup membingungkan: ketika pada prompt interaktif bash, Anda sebenarnya tidak dalam mode pengeditan baris "kanonik". Sebaliknya, bashmenerima setiap karakter secara langsung saat Anda mengetiknya, dan menafsirkan urutan kontrol itu sendiri, melalui pustaka readline . Pustaka ini akan menghormati pemetaan yang Anda setel pada perangkat terminal Anda, jadi Anda masih bisa menggunakannya sttyuntuk mengubahnya. Atau, Anda dapat menyesuaikannya secara mandiri di dalam bashdan program berbasis readline lainnya dengan mengatur unix-line-discardproperti di dalam ~/.inputrcfile Anda . Lihat halaman bash man untuk info lebih lanjut.

Ketika Anda menjalankan suatu program, aktifkan bashkembali mode pengeditan garis kanonik ( stty icanon) jika diaktifkan sebelumnya, dan kemudian nonaktifkan lagi ketika program selesai ( stty -icanon).


Terima kasih, itu membantu saya melacak dan memperbaiki masalah tilda / yay 'erase' saya!
Thomas Hesse
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.