Cara Menggunakan Widget Ncurses Dalam Skrip Shell di Linux

Cara Menggunakan Widget Ncurses Dalam Skrip Shell di Linux

Dalam tutorial ini kita akan mempelajari asas -asas Utiliti dialog, Untuk menggunakan ncurses widget dalam skrip shell kami. Kami akan melihat cara memasang dialog dalam pengagihan Linux yang paling banyak digunakan, beberapa pilihan biasa yang boleh kita gunakan untuk mengubah tingkah laku dialog, cara menggunakan beberapa widget; antara yang lain: kotak input, senarai semak, Radiolis dan Ya tidak. Akhirnya, kita akan melihat cara menggunakan data yang diperolehi oleh pemprosesan widget.

Dalam tutorial ini anda akan belajar:

  • Cara Memasang Utiliti Dialog di Linux
  • Apakah pilihan dialog yang paling relevan
  • Cara Menggunakan Kotak Input, Senarai Semak, Radiolis, Kata Laluan, MSBox, Kalendar dan Widget Yesno
  • Cara menguruskan data yang diperoleh dari pemprosesan widget


Keperluan perisian dan konvensyen yang digunakan

Keperluan Perisian dan Konvensyen Talian Perintah Linux
Kategori Keperluan, konvensyen atau versi perisian yang digunakan
Sistem Pengedaran-bebas
Perisian Utiliti dialog diperlukan untuk mengikuti tutorial ini
Yang lain Kebiasaan dengan antara muka baris arahan dan pengalihan shell
Konvensyen # - Memerlukan arahan Linux yang diberikan untuk dilaksanakan dengan keistimewaan akar sama ada secara langsung sebagai pengguna root atau dengan menggunakan sudo perintah
$ - Memerlukan arahan Linux yang diberikan sebagai pengguna yang tidak layak

Pemasangan pada Linux

The dialog Utiliti boleh didapati di semua repositori lalai pengagihan Linux utama, oleh itu kami boleh menggunakan pengurus pakej kegemaran kami untuk memasangnya. Jika kita menggunakan Fedora, sebagai contoh, kita boleh menjalankan:



$ sudo DNF Pasang dialog

Pada Debian kita boleh lari:

$ sudo apt-get pemasangan dialog

The dialog Utiliti juga terkandung dalam repositori teras archlinux, jadi kami boleh memasangnya melalui Pacman:

$ sudo pacman -s dialog

Memasang arahan juga berlaku untuk derivatif pengagihan yang disebutkan di atas.

Pilihan dialog biasa

Kami memanggil pilihan ini "biasa" kerana ia boleh digunakan secara bebas daripada jenis widget yang ingin kami gunakan. Di sini kita hanya akan melihat sebahagian daripada mereka, yang mungkin menarik minat segera apabila kita mula menggunakan dialog.

Tetapan Tajuk Kotak Widget: Pilihan -Title

Dengan menggunakan --tajuk Pilihan kita boleh menentukan rentetan yang akan digunakan sebagai tajuk widget; ia akan dipaparkan di bahagian atas kotak. Berikut adalah contoh:

$ dialog --Title "Tajuk Dialog" -Inputbox "Masukkan Nama Anda:" 0 0

Inilah yang dipaparkan sebagai hasil arahan di atas:





Menggabungkan widget: pilihan -dan -widget:

The --dan Widget pilihan, boleh digunakan untuk "berantai" lebih banyak widget, sehingga setelah kami menggunakan yang pertama, kami segera diminta dengan yang kedua. Rantai ini dihentikan apabila salah satu dialog mengembalikan status wujud bukan sifar. Contoh penggunaannya ialah:

$ dialog \-Inputbox "Masukkan Nama Anda:" 0 0 \-dan-Widget-Inputbox "Masukkan Umur Anda:" 0 0

Sebaik sahaja kami melancarkan arahan di atas, widget input pertama yang digunakan untuk meminta kami untuk nama kami akan dipaparkan. Sebaik sahaja kami mengesahkan input dengan mengklik pada okey butang, widget seterusnya akan dipaparkan, dan kami akan diminta untuk memasukkan usia kami.

Membersihkan skrin dengan pilihan yang jelas

Apabila kita menggunakan --dan Widget pilihan kandungan yang dibuat oleh satu widget mengatasi yang dihasilkan oleh yang sebelumnya. Sekiranya widget tidak menduduki ruang skrin yang sama, kedua -dua kandungan itu akan dicampur, dan ini akan menimbulkan kekacauan.

Untuk mengelakkan kandungan bertindih, kita boleh menggunakan --jelas pilihan; Apabila kita lakukan, kandungan widget dipadamkan sebelum widget seterusnya dipaparkan: hanya warna latar belakang yang dipelihara.

Menetapkan butang A seperti yang diserlahkan secara lalai: pilihan -default -button pilihan

Bergantung pada widget yang kami gunakan, lebih daripada satu butang boleh dipaparkan pada skrin dan secara lalai salah satu daripada mereka diserlahkan secara lalai, menentukan tindakan lalai yang akan dilakukan apabila pengguna menekan masuk.

Kita boleh mengatasi
widget lalai dengan menggunakan --butang lalai pilihan diikuti dengan nama butang, satu di antara okey, Ya, Batalkan, tidak, tolong atau tambahan.



Pilihan ini boleh sangat berguna, sebagai contoh, apabila meminta pengesahan sebelum melaksanakan yang berpotensi
Tindakan Berbahaya:

$ dialog--default-button "no"-inputbox "Masukkan nama anda:" 0 0


Seperti yang anda lihat dari tangkapan skrin, kami membuat supaya butang "tidak" dipilih secara lalai, supaya pengguna secara jelas memilih "ya" untuk mengesahkan pilihannya.

Menetapkan elemen terpilih lalai dalam senarai dengan -default -item

Semasa kami menggunakan senarai semak atau widget menu, elemen pertama dalam senarai pilihan yang mungkin dipilih secara lalai. Dengan menggunakan --Item lalai Pilihan dan merujuk elemen, kita boleh menggunakannya sebagai lalai alternatif:

$ dialog-Default-item 2 --Checklist "Pilih:" 0 0 5 \ 1 "Elemen Pertama" Off \ 2 "Elemen Kedua" Off \ 3 "Elemen Ketiga"




Seperti yang dapat anda lihat, dalam contoh di atas, kami merujuk elemen olehnya tag, 2 Dalam kes ini (kita akan mengembangkannya kemudian).

Menentukan kelewatan masa selepas pengesahan: Pilihan -sleep

Kadang -kadang kami mungkin mahu permohonan kami menunggu beberapa saat selepas memproses kotak dialog. Untuk mencapai tingkah laku ini kita boleh menggunakan --tidur pilihan dan berikan bilangan detik untuk menunggu sebagai nilai:

$ dialog -Sleep 3 -InputBox "Masukkan Nama Anda:" 0 0

Hasil daripada arahan di atas, selepas kotak input widget dipaparkan, dan pengguna mencecah Masukkan kunci, 3 detik menunggu sebelum arahan seterusnya dalam skrip panggilan dilakukan.

Memberi masa tamat pilihan

Dalam beberapa kes, kami mungkin mahu memberi pengguna jumlah maksimum detik untuk melaksanakan pilihannya. Aplikasi dialog menyediakan --masa tamat pilihan untuk mendapatkan tingkah laku tersebut. Bilangan detik masa tamat mesti diluluskan sebagai hujah pilihan. Jika selepas jumlah detik yang ditentukan oleh pengguna tidak melakukan pilihannya, aplikasi akan keluar dengan status ralat:

$ dialog -timeout 3 -inputbox "Masukkan nama anda:" 0 0

Menetapkan label alternatif untuk butang

The dialog Utiliti menyediakan satu siri pilihan untuk mengatasi label lalai untuk butang: kita boleh menggunakan --Label keluar, --Label tambahan, --label bantuan, --tiada label, --ok-label, --Ya-label Untuk menukar label "keluar", "tambahan", "membantu", "tidak", "ok" dan "ya" butang,.

Setiap pilihan yang disebutkan di atas mengambil rentetan sebagai hujah, yang digunakan sebagai label butang. Berikut adalah contoh penggunaan pilihan:

$ dialog--default-button "no" \ --no-label "I Do not" \ --yes-label "I Do" \ --yesno "Adakah anda benar-benar mahu memformat partition?"0 0

Perintah di atas akan menghasilkan hasil berikut:





Widget dialog

Sehingga kini kita melihat beberapa yang paling berguna dialog Pilihan "biasa". Sekarang kita akan melihat cara menggunakan beberapa widget yang ada secara terperinci. Sebelum meneruskan, kita mesti menentukan sintaks umum. Apabila kami melancarkan dialog, kami mesti sentiasa menyediakan tiga parameter:

  1. Teks yang akan dipaparkan dalam widget;
  2. Lebar widget;
  3. Ketinggian widget;

Sekiranya kami memberikan nilai 0 Untuk lebar atau ketinggian, nilai atribut yang sepadan ditetapkan secara automatik.

Widget InputBox

Widget InputBox digunakan untuk meminta pengguna untuk menjawab soalan dengan input teks. Parameter teks digunakan untuk memberikan soalan: jika rentetan lebih panjang daripada kotak dialog, yang terakhir akan menjadi scrollable. Untuk menggunakan widget ini, kami memanggil dialog dengan --kotak input pilihan:



Semasa keluar, input yang disediakan oleh pengguna dipaparkan pada output dialog, yang secara lalai adalah stderr.

Widget senarai semak

Kami sudah melihat bagaimana widget senarai semak kelihatan seperti dalam contoh sebelumnya: Dalam jenis widget ini, satu siri pilihan diberikan kepada pengguna yang boleh memilih satu atau lebih daripadanya. Untuk menggunakan widget ini, kita mesti menggunakan --senarai semak pilihan, dan, sebagai tambahan kepada tiga parameter standard yang mesti diserahkan kepada semua widget, kita mesti menyediakan juga Senarai ketinggian dan pilihan yang akan dipaparkan.



The ketinggian garis Parameter digunakan untuk menetapkan berapa banyak baris yang harus dipaparkan sekaligus: jika bilangan baris kurang daripada pilihan yang ada, menu akan menjadi scrollable. Jika kami menyediakan 0 sebagai nilai ketinggian garis Bilangan baris akan sesuai dengan bilangan pilihan.

Untuk setiap pilihan kita mesti memberikan pengenal (tag), nama dan status yang boleh mati atau pada. Sekiranya statusnya pada pilihan akan diperiksa secara lalai. Sebaik sahaja kami mengesahkan pilihan kami, tag yang berkaitan dengan entri yang kami periksa akan dipaparkan pada stderr:

$ dialog -CHECKLIST "Pilih Item:" 0 0 0 \ 1 "Pilihan Nombor Satu" OFF \ 2 "Nombor dua pilihan" pada \ 3 "Nombor Tiga" OFF \ 4 "Nombor Empat" pada

Dengan arahan di atas, kami melancarkan menu dengan 4 pilihan, dan tetapkan pilihan 2 dan 4 diperiksa secara lalai. Output arahan adalah seperti berikut:



Widget radiolis

Widget radiolis dilancarkan apabila dialog dipanggil dengan --Radiolis pilihan. Ia berfungsi sama dengan widget senarai semak, dengan perbezaan pilihan yang saling eksklusif, jadi hanya satu elemen yang boleh dipilih. Inilah cara kami menggunakan widget:

$ dialog -Radiolist "Pilih Item:" 0 0 0 \ 1 "Pilihan Nombor Satu" OFF \ 2 "Nombor dua pilihan" pada \ 3 "nombor tiga" OFF \ 4 "OFF NOMBOR EMPAT"


Oleh kerana pilihannya saling eksklusif, hanya pilihan pertama yang ditetapkan ke Pada akan dipilih sebagai lalai.



Tanya pengguna untuk kata laluan menggunakan widget kata laluan

Widget kotak kata laluan digunakan untuk membiarkan pengguna memasukkan kata laluan. Atas sebab keselamatan, teks yang dimasukkan oleh pengguna tidak dipaparkan. Tingkah laku ini dapat diubah suai dengan menggunakan --tidak selamat Pilihan: Sekiranya kita lakukan, widget akan memaparkan asterisk untuk setiap huruf kata laluan yang dimasukkan dalam medan yang sepadan.

Kami menggunakan widget dengan melancarkan dialog dengan --kotak kata laluan pilihan:

$ dialog -InSecure --passwordbox "Masukkan kata laluan anda:" 0 0

Output arahan di atas adalah:



Memaparkan mesej dengan widget msgbox

Penggunaan widget ini sangat mudah: ia dipanggil dengan memanggil dialog dengan --msgbox pilihan dan memaparkan mesej yang merupakan kandungan teks parameter. Satu okey butang dipaparkan:

$ dialog - -msgbox "Ini adalah mesej yang sangat penting yang harus dibaca dengan teliti!"0 0




Widget kalendar

Kita boleh menggunakan widget kalendar dengan menggunakan utiliti dialog dengan --kalendar pilihan. Widget marilah kita pilih tarikh dengan memilih bulan, hari dan tahun yang dipaparkan di bahagian berasingan widget. Adalah mungkin untuk memberikan tarikh lalai dengan lulus sebagai sebahagian daripada arahan.

Untuk memulakan widget dengan "hari kelima Mei tahun 2020" sebagai tarikh lalai, sebagai contoh, kami akan menjalankan arahan berikut:

$ dialog -Calendar "Pilih Tarikh:" 0 0 27 05 2020

Ia akan menghasilkan output berikut:






Kita boleh bergerak di antara bahagian widget menggunakan Tab kunci, dan tukar parameter dengan menggunakan kekunci anak panah. Sebaik sahaja kami mengesahkan pemilihan, ia dipaparkan ke stderr dalam format hari/bulan/tahun; ini boleh diubah suai dengan menggunakan --format tarikh pilihan dengan format yang serasi dengan strftime ditentukan sebagai hujah. Untuk membuat output dalam format tahun/bulan/hari, sebagai contoh, kami akan menjalankan:

$ dialog --date-format%y/%m/%d-calendar "Pilih tarikh" 0 0 27 05 2020

Tekan pengguna untuk pengesahan: widget yesno

Kami sudah menemui widget ini: ia membolehkan kami mendorong pengguna untuk pengesahan. Semasa menggunakannya, kami menentukan soalan yang akan ditanya melalui teks parameter. Bergantung pada pilihan pengguna status keluar dikembalikan: 0 Sekiranya pengguna mengesahkan dengan mengklik pada Ya butang, 1 jika tidak.

Untuk memanggil widget ini kita mesti menggunakan --Ya tidak pilihan:

$ dialog --yesno "Adakah anda mengesahkan?"0 0

Inilah widget:



Menguruskan output yang dihasilkan oleh widget

Secara lalai, output yang dihasilkan oleh widget dipaparkan pada stderr, jadi sebagai contoh, untuk menyimpan data yang diperoleh dari widget ke fail, yang perlu kita lakukan adalah diarahkan semula stderr Untuk mengatakan fail (jika anda tidak biasa dengan pengalihan semula, anda mungkin ingin melihat Pengenalan kepada Tutorial Pengalihan Shell Bash):

$ dialog -condong "Pilih Item:" 0 0 \ 1 "Pilihan Nombor Satu" Off \ 2 "Nombor dua pilihan" pada \ 3 "Nombor Tiga" Off \ 4 "Pilihan Nombor Empat" pada 2> Pilihan.txt

Setelah pengguna mengesahkan pilihannya, mereka akan ditulis, ruang yang dipisahkan ke dalam pilihan.txt fail.

Bagaimana jika kita mahu menyimpan pemilihan terus ke dalam pemboleh ubah? Untuk melaksanakan tugas kita mesti menggunakan --stdout pilihan, supaya output widget dipaparkan pada stdin bukan stderr:

$ pilihan = "$ (dialog --StDout --CheckList" Pilih Item: "0 0 0 \ 1" Pilihan Nombor Satu "OFF \ 2" Nombor dua "pada \ 3" Nombor Nombor Tiga "OFF \ 4" empat "on)"


Dalam contoh di atas, hasil pemprosesan widget, boleh diakses melalui pilihan pembolehubah. Mungkin kita mungkin mahu gelung ke atas mereka:

$ untuk pilihan dalam $ pilihan; Adakah echo "$ choice"; dilakukan 2 4

Untuk menguruskan proses Ya tidak widget kita mesti berkelakuan berbeza. Kata widget, seperti yang telah kita lihat, tidak menghasilkan apa -apa output tetapi mengubah kod keluar perintah yang digunakan untuk menghilangkannya dengan sewajarnya kepada pilihan pengguna. Sekiranya pengguna mengesahkan, dan menjawab secara tegas kepada soalan, kod keluar ditetapkan ke 0, jika tidak 1 (Ini mungkin kelihatan ganjil, tetapi ingat bahawa 0 bermaksud okey manakala 1 adalah status keluar yang bermaksud bahawa arahan tidak berjaya). Mengetahui ini kita boleh menulis sesuatu seperti:

jika dialog --yesno "Adakah anda ingin membuka contoh terminal gnome ?"0 0; Kemudian jelaskan Gnome-terminal fi 

Kesimpulan

Dalam tutorial ini kita melihat bagaimana kita boleh menggunakannya dialog permohonan untuk digunakan ncurses widget dalam skrip shell. Mula -mula kita melihat beberapa pilihan biasa yang boleh digunakan secara bebas dari jenis widget, daripada kita melihat beberapa widget secara khusus. Terdapat banyak lagi widget yang boleh digunakan dialog: Untuk senarai lengkap saya cadangkan anda melihat manual aplikasi.

Tutorial Linux Berkaitan:

  • Perkara yang hendak dipasang di Ubuntu 20.04
  • Cara mengintegrasikan kotak dialog dalam skrip shell dengan whiptail
  • Perkara yang perlu dilakukan setelah memasang ubuntu 20.04 Focal Fossa Linux
  • Bermula dengan Tkinter untuk Tutorial Python
  • Gelung bersarang dalam skrip bash
  • Perkara yang perlu dipasang di Ubuntu 22.04
  • Perintah Linux: Top 20 Perintah Paling Penting yang Anda Perlu ..
  • Perkara yang perlu dilakukan setelah memasang Ubuntu 22.04 Jur -ubur Jammy ..
  • Perintah Linux Asas
  • Pasang Arch Linux di Workstation VMware