Saya memiliki skrip bash seperti berikut:
#!/bin/bash
echo "Please enter your username";
read username;
echo "Please enter your password";
read password;
Saya ingin bahwa ketika pengguna mengetikkan kata sandi di terminal, itu tidak boleh ditampilkan (atau sesuatu seperti *******) harus ditampilkan). Bagaimana saya mencapai ini?
*
saat mereka mengetikkan kata sandiread
? dan lain-lain.Jawaban:
Cukup berikan -s ke panggilan baca Anda seperti ini:
sumber
-s
menampilkan apa pun saat input diketik. (-s
adalah ekstensi non-POSIX, jadi tidak semua shell mendukungnya, sepertiash
shell yang disertakan dengan BusyBox; gunakanssty -echo
pendekatan pada shell tersebut)man
halaman ini yang benar-benar menyarankan agar-s
warna teks disetel sama dengan warna latar belakang. Itu hanya "bergema diam-diam". ss64.com/bash/read.htmlSilent mode. If input is coming from a terminal, characters are not echoed.
Memperbarui
Jika Anda ingin menjadi mewah dengan mengeluarkan
*
untuk setiap karakter yang mereka ketik, Anda dapat melakukan sesuatu seperti ini (menggunakanread -s
solusi andreas ):Tanpa mewah
sumber
IFS=$'\n'
agar Anda benar-benar dapat menyelesaikan pengetikan kata sandi. Jika tidak bagus; sangat pintar.IFS=$'\n'
karena pembatas default read adalah-d $'\n'
. Pernyataan if untuk memutuskan string nul, yang terjadi pada baris baru, memungkinkan mereka menyelesaikan sandi.read
a-d ''
. Ketika saya mencobanya lagi nanti di Linux, saya menggunakan versi yang sudah diposting ulang. Jika saya mencoba menghilangkannya,-d ''
tentu saja ini berfungsi sama di FreeBSD! Saya sebenarnya cukup lega bahwa tidak ada sihir platform misterius yang bekerja di sini.untuk solusi yang bekerja tanpa bash atau fitur tertentu dari
read
Anda dapat menggunakanstty
untuk menonaktifkan gemasumber
Berikut adalah variasi dari
*
solusi pencetakan luar biasa @ SiegeXbash
dengan dukungan untuk backspace yang ditambahkan; ini memungkinkan pengguna untuk mengoreksi entri mereka denganbackspace
kunci (delete
kunci pada Mac) , seperti yang biasanya didukung oleh petunjuk kata sandi:catatan:
0x7f
: "Dalam sistem modern, tombol backspace sering dipetakan ke karakter hapus (0x7f dalam ASCII atau Unicode)" https://en.wikipedia.org/wiki/Backspace\b \b
diperlukan untuk memberikan tampilan menghapus karakter ke kiri; hanya menggunakan\b
memindahkan kursor ke kiri, tetapi membiarkan karakter tetap utuh ( spasi mundur tidak merusak ). Dengan mencetak spasi dan mundur lagi, karakter tersebut tampaknya telah dihapus (terima kasih, Karakter escape "backspace" '\ b' di C, perilaku tak terduga? ).Dalam POSIX-satunya shell (misalnya,
sh
pada Debian dan Ubuntu, di manash
adalahdash
), menggunakanstty -echo
pendekatan (yang suboptimal, karena mencetak apa-apa ), karenaread
builtin tidak akan mendukung-s
dan-n
pilihan.sumber
Sedikit berbeda dari (tapi kebanyakan suka) jawaban @ lesmana
sederhananya: sembunyikan gema apakah barang Anda menunjukkan gema
sumber
stty
panggilan lain , dan satu variabel yang lebih sedikit di stack - hanya menghilangkan gema dan hanya memulihkan gema. Apakah ada kemungkinan hal ini dapat mengganggustty
pengaturan lain ? Lesmana's mempertahankan semua pengaturan.Berikut adalah variasi jawaban @ SiegeX yang berfungsi dengan shell Bourne tradisional (yang tidak mendukung
+=
penugasan).sumber
[[ ... ]]
, danread
bawaannya juga tidak memiliki opsi-s
dan-n
. Oleh karena itu, kode Anda tidak akan berfungsidash
, misalnya. (Ini akan bekerja pada platform di manash
sebenarnyabash
, seperti di OSX, di manabash
ketika dipanggilsh
hanya mengubah beberapa opsi default sambil tetap mendukung sebagian besar bashisme.)[
tetapi jelas tidak banyak yang dapat saya lakukan jika Andaread
tidak memiliki opsi ini.Saya selalu suka menggunakan karakter pelarian Ansi:
8m
membuat teks tidak terlihat dan0m
menyetel ulang teks ke "normal". -E membuat Ansi kabur.Satu-satunya peringatan adalah Anda masih dapat menyalin dan menempelkan teks yang ada di sana, jadi Anda mungkin tidak boleh menggunakan ini jika Anda benar-benar menginginkan keamanan.
Ini hanya memungkinkan orang tidak melihat sandi Anda saat Anda mengetiknya. Hanya saja, jangan tinggalkan komputer Anda setelah itu. :)
CATATAN:
Di atas adalah platform independen selama mendukung urutan escape Ansi.
Namun, untuk solusi Unix lainnya, Anda dapat mengatakan
read
untuk tidak menggemakan karakter ...sumber
sumber