Ini bekerja untuk saya pada berbagai rasa Linux, di mana beberapa dari solusi lain tidak (termasuk yang paling populer di sini). Saya pikir itu lebih mudah dibaca juga...
echo Press enter to continue; read dummy;
Perhatikan bahwa variabel perlu diberikan sebagai argumen untuk read
.
Saya sering menggunakan cara ini yang sangat singkat, dan seperti solusi @theunamedguy dan @Jim, tetapi dengan waktu tunggu dan mode senyap sebagai tambahan.
Saya terutama menyukai case terakhir dan menggunakannya di banyak skrip yang berjalan dalam satu lingkaran hingga pengguna menekan Enter .
Perintah
-
Masukkan solusi
read -rsp $'Press enter to continue...\n'
-
Solusi melarikan diri (dengan -d $'\e')
read -rsp $'Press escape to continue...\n' -d $'\e'
-
Solusi penting apa pun (dengan -n 1)
read -rsp $'Press any key to continue...\n' -n 1 key # echo $key
-
Pertanyaan dengan pilihan yang dipilih sebelumnya (dengan -ei $'Y')
read -rp $'Are you sure (Y/n) : ' -ei $'Y' key; # echo $key
-
Solusi waktu habis (dengan -t 5)
read -rsp $'Press any key or wait 5 seconds to continue...\n' -n 1 -t 5;
-
Alias tidur yang ditingkatkan
read -rst 0.5; timeout=$? # echo $timeout
Penjelasan
-r menentukan mode mentah, yang tidak mengizinkan karakter gabungan seperti "\" atau "^".
-s menentukan mode senyap, dan karena kita tidak memerlukan keluaran keyboard.
-p $'permintaan ' menentukan prompt, yang harus antara $' dan ' untuk membiarkan spasi dan karakter yang lolos. Hati-hati, Anda harus meletakkan di antara tanda kutip tunggal dengan simbol dolar untuk mendapatkan keuntungan dari karakter yang lolos, jika tidak, Anda dapat menggunakan tanda kutip sederhana.
-d $'\e ' menentukan escappe sebagai karakter pembatas, jadi sebagai karakter terakhir untuk entri saat ini, ini memungkinkan untuk menempatkan karakter apa pun tetapi hati-hati untuk menempatkan karakter yang dapat diketik pengguna.
-n 1 menetapkan bahwa itu hanya membutuhkan satu karakter.
-e menentukan mode readline.
-i $'Y ' menetapkan Y sebagai teks awal dalam mode readline.
-t 5 menentukan batas waktu 5 detik
kunci melayani jika Anda perlu mengetahui input, dalam kasus -n1, tombol yang telah ditekan.
$? berfungsi untuk mengetahui kode keluar dari program terakhir, untuk membaca, 142 jika terjadi batas waktu, 0 input yang benar. Taruh $? dalam variabel sesegera mungkin jika Anda perlu mengujinya setelah beberapa perintah, karena semua perintah akan menulis ulang $?
read
melakukan ini:
[email protected]:~$ read -n1 -r -p "Press any key to continue..." key
[...]
[email protected]:~$
-n1
menentukan bahwa itu hanya menunggu satu karakter. -r
menempatkannya ke mode mentah, yang diperlukan karena jika tidak, jika Anda menekan sesuatu seperti garis miring terbalik, itu tidak akan terdaftar sampai Anda menekan tombol berikutnya. -p
menentukan prompt, yang harus dikutip jika berisi spasi. key
argumen hanya diperlukan jika Anda ingin mengetahui tombol mana yang mereka tekan, dalam hal ini Anda dapat mengaksesnya melalui $key
.
Jika Anda menggunakan Bash, Anda juga dapat menentukan batas waktu dengan -t
, yang menyebabkan read mengembalikan kegagalan saat tombol tidak ditekan. Jadi misalnya:
read -t5 -n1 -r -p 'Press any key in the next five seconds...' key
if [ "$?" -eq "0" ]; then
echo 'A key was pressed.'
else
echo 'No key was pressed.'
fi
read
tanpa parameter apa pun hanya akan berlanjut jika Anda menekan enter. DOS pause
perintah akan berlanjut jika Anda menekan tombol apa saja. Gunakan read –n1
jika Anda menginginkan perilaku ini.