Bagaimana cara menghentikan skrip bash hingga pengguna menekan Space?
Saya ingin memiliki pertanyaan dalam skrip saya
Tekan spasi untuk melanjutkan atau CTRL+ Cuntuk keluar
dan kemudian skrip harus berhenti dan menunggu sampai Space ditekan.
bash
control-flow
rubo77
sumber
sumber
Jawaban:
Anda bisa menggunakan
read
:sumber
read -n1 -rsp $'Press any key to continue or Ctrl+C to exit...\n'
else
Blok selalu berjalan, bahkan ketika bilah spasi ditekan.bash
. Ini berfungsi jika Anda menggunakannyaread _
sebagai gantinya, jika Anda memiliki beberapa shell selainbash
.''
mengandung ruang di dalam?''
untuk string kosong. Tidak ada ruang di dalam. Saya kira, itu juga cocok, jika Anda memasukkan ENTER atau TABMetode yang dibahas dalam T&J SO ini kemungkinan merupakan kandidat terbaik untuk alternatif
pause
perilaku yang biasa Anda lakukan di Windows saat melakukan file BAT.Contoh
Di sini saya menjalankan di atas dan kemudian cukup menekan tombol apa saja, dalam hal ini Dkuncinya.
Referensi
sumber
$
sebelum string di sini-rsp $'Press
:?echo -e "..."
garis tambahan . Jauh lebih ringkas dalam situasi itu.Ini sekarang mencetak prompt tanpa baris baru, menangani dengan
CTRL+C
andal,stty
hanya memanggil sesering yang diperlukan, dan mengembalikan tty mengendalikan ke keadaan di manastty
menemukannya. Cariman stty
informasi tentang cara mengontrol gema, mengontrol karakter, dan semuanya secara eksplisit.Anda mungkin juga melakukan ini:
Anda dapat melakukannya dengan
ENTER
, tanpa[
tes]
dan tanpastty
suka:sumber
Anda dapat membuat fungsi untuk itu:
Maka Anda dapat menggunakan ini di mana saja dalam skrip Anda:
sumber
malas satu liner:
Kerugiannya adalah Anda kehilangan kendali ketika pengguna menekan ctrl + c. Script akan selalu keluar dengan kode 130 dalam kasus itu.
sumber
Pengaturan
IFS
untuk mengosongkan string akan menekan perilaku default baca dari pemotongan ruang putih.UPDATE 2018-05-23: Kita dapat menyederhanakan ini dengan menggunakan variabel REPLY, yang tidak tunduk pada pemisahan kata:
sumber
Inilah cara yang bekerja di keduanya
bash
danzsh
, dan memastikan I / O ke terminal:Taruh di dalam Anda
.{ba,z}shrc
untuk Keadilan Hebat!sumber