Apakah ada cara untuk menghapus semua karakter yang saya masukkan dalam tersembunyi password prompt di Linux? Misalnya, ketika saya SSH ke server, itu meminta password saya di mana kunci yang dimasukkan tidak akan ditampilkan:
$ ssh root@somehost
root@somehost's password:
Apakah ada cara untuk menghapus semua teks yang dimasukkan tanpa harus tekan backspace untuk jumlah yang tidak diketahui dari waktu? Ketika saya pikir saya memasuki sesuatu yang salah aku ingin memulai dari awal dan menekan backspace untuk beberapa detik menjengkelkan. Aku mencoba Spasi, PilihA mudah-mudahan pilih seluruh teks dan Home. PilihC membatalkan seluruh perintah dan saya harus mengirim perintah lagi untuk mencoba lagi. Ini adalah hampir yang terbaik dan tercepat solusi tapi masih belum memuaskan. Insert tidak bekerja di shell saya baik.
Tidak seperti bash
, ssh
's prompt password doesn't menggunakan terminal khusus-input perpustakaan seperti readline
. Garis-fitur editing yang hanya baseline POSIX TTY line-fitur editing.
Jadi anda memiliki POSIX TTY di "dimasak" modus (tidak baku), alias kanonik mode, dan hanya baris editing yang's yang tersedia adalah apa yang's yang disediakan oleh kernel. Lihat stty(1)
, dan melihat bahwa
membunuh = ^U
. Ini juga di mana backspace karakter didefinisikan (erase = ^?
). Kata-erase (^W
) lebih nyaman ketika anda're tidak mengetik buta.
lnext = ^V
berarti anda dapat mengetik control-v maka apa pun (termasuk control-c) untuk mendapatkan literal control-c.
Untuk men-debug apa yang anda coba lakukan secara membabi buta, jalankan kucing
atau kucing > /dev/null
di terminal anda. Jenis barang-barang, kemudian melihat apa yang bekerja dan apa yang doesn't untuk mengeditnya.
readline
(yang digunakan oleh bash
) membaca baku karakter dan garis-edit di user-space. Default binding yang kompatibel dengan standar TTY karakter kontrol, meskipun, untuk subset dari fitur editing yang mereka berikan.
readline berjalan jalan di luar garis sederhana editing polos TTY. (misalnya TTY hanya dapat menghapus karakter pada akhir baris, sehingga ada's tidak ada ^a
dan hapus
atau panah kiri/kanan)
Ketika bash
menjalankan sebuah perintah di foreground, menempatkan TTY ke kanonik mode pertama (karena itu's default). Jadi menjalankan stty -a
(dengan tidak ada pengalihan) akan selalu melihat terminal sendiri dalam kanonik mode. Tapi jika anda mengarahkan masukan dari beberapa TTY yang memiliki bash
yang berjalan di atasnya, anda dapat melihat apa pengaturan terminal bash + readline diterapkan. misalnya stty -a < /dev/pts/12
menunjukkan -icanon
untuk mode mentah karena saya memiliki bash
yang berjalan di terminal itu. (Saya beralih ke tab lain dan berlari tty
, maka digunakan perangkat itu path file dari terminal pertama). Jika aku berlari kucing
di terminal, aku'd lihat icanon
untuk kanonik mode.
Terkait: TTY demystified
https://www.gnu.org/software/libc/manual/html_node/Canonical-or-Not.html