Cara menggunakan widget ncurses dalam skrip shell di linux

Cara menggunakan widget ncurses dalam skrip shell di linux

Dalam tutorial ini kita akan mempelajari dasar -dasar utilitas dialog, untuk digunakan ncurses widget di skrip shell kami. Kami akan melihat cara menginstal dialog dalam distribusi Linux yang paling banyak digunakan, beberapa opsi umum yang dapat kami gunakan untuk mengubah perilaku dialog, cara menggunakan beberapa widget; Di antara yang lain: kotak input, daftar periksa, Radiolist Dan ya Tidak. Akhirnya, kita akan melihat cara menggunakan data yang diperoleh dengan pemrosesan widget.

Dalam tutorial ini Anda akan belajar:

  • Cara menginstal utilitas dialog di linux
  • Opsi dialog apa yang paling relevan
  • Cara menggunakan inputbox, daftar periksa, radiolist, kotak sandi, msbox, kalender dan widget yesno
  • Cara mengelola data yang berasal dari pemrosesan widget


Persyaratan dan konvensi perangkat lunak yang digunakan

Persyaratan Perangkat Lunak dan Konvensi Baris Perintah Linux
Kategori Persyaratan, konvensi atau versi perangkat lunak yang digunakan
Sistem Distribusi-independen
Perangkat lunak Utilitas dialog diperlukan untuk mengikuti tutorial ini
Lainnya Keakraban dengan antarmuka baris perintah dan pengalihan shell
Konvensi # - mensyaratkan perintah linux yang diberikan untuk dieksekusi dengan hak istimewa root baik secara langsung sebagai pengguna root atau dengan menggunakan sudo memerintah
$ - mensyaratkan perintah Linux yang diberikan untuk dieksekusi sebagai pengguna biasa

Instalasi di Linux

Itu dialog Utilitas tersedia di semua repositori default Distribusi Linux utama, oleh karena itu kami dapat menggunakan manajer paket favorit kami untuk menginstalnya. Jika kita menggunakan fedora, misalnya, kita dapat menjalankan:



Dialog Instal Sudo DNF

Di Debian kita bisa menjalankan:

$ sudo apt-get install dialog

Itu dialog Utilitas juga terkandung dalam repositori inti Archlinux, jadi kami dapat menginstalnya melalui Pacman:

Dialog $ sudo Pacman

Menginstal perintah juga berlaku untuk turunan dari distribusi yang disebutkan di atas.

Opsi Dialog Umum

Kami menyebut opsi ini "umum" karena dapat digunakan secara independen dari jenis widget yang ingin kami gunakan. Di sini kita hanya akan melihat beberapa dari mereka, yang mungkin menarik saat kita mulai menggunakan dialog.

Pengaturan Judul Kotak Widget: Opsi -Title

Dengan menggunakan --judul Opsi kami dapat menentukan string yang akan digunakan sebagai judul widget; itu akan ditampilkan di bagian atas kotak. Inilah contohnya:

$ dialog - -title "judul dialog" - -inputbox "Masukkan nama Anda:" 0 0

Inilah yang ditampilkan sebagai hasil dari perintah di atas:





Menggabungkan widget: opsi -dan -widget:

Itu --dan-Widget opsi, dapat digunakan untuk "rantai" lebih banyak widget, sehingga setelah kami menggunakan yang pertama, kami segera diminta dengan yang kedua. Rantai dihentikan ketika salah satu dialog mengembalikan status yang tidak ada nol. Contoh penggunaannya adalah:

$ dialog \--inputbox "Masukkan nama Anda:" 0 0 \ ---andget --inputbox "Masukkan usia Anda:" 0 0

Setelah kami meluncurkan perintah di atas, widget input pertama yang digunakan untuk meminta kami untuk nama kami akan ditampilkan. Setelah kami mengonfirmasi input dengan mengklik OKE tombol, widget berikutnya akan ditampilkan, dan kami akan diminta untuk memasukkan usia kami.

Membersihkan layar dengan opsi -Clear

Saat kami menggunakan --dan-Widget opsi konten yang dibuat oleh satu widget menimpa yang dihasilkan oleh yang sebelumnya. Jika widget tidak menempati ruang layar yang sama persis, dua konten akan dicampur, dan ini akan membuat kekacauan.

Untuk menghindari konten yang tumpang tindih, kita dapat menggunakan --jernih pilihan; Saat kami melakukannya, konten widget dihapus sebelum widget berikutnya ditampilkan: Hanya warna latar belakang yang dipertahankan.

Mengatur tombol A yang disorot secara default: opsi -default -tombol

Bergantung pada widget yang kami gunakan, lebih dari satu tombol dapat ditampilkan di layar dan secara default salah satunya disorot secara default, menentukan tindakan default yang akan dilakukan ketika pengguna menekan enter.

Kita bisa mengesampingkan
widget default dengan menggunakan --tombol default Opsi diikuti dengan nama tombol, salah satunya Oke, Ya, membatalkan, TIDAK, membantu atau tambahan.



Opsi ini bisa sangat berguna, misalnya, saat meminta konfirmasi sebelum melakukan yang berpotensi
Tindakan Berbahaya:

$ dialog --Default-tombol "no"--inputbox "Masukkan nama Anda:" 0 0


Seperti yang dapat Anda lihat dari tangkapan layar, kami buat sehingga tombol "Tidak" dipilih secara default, sehingga pengguna harus secara eksplisit memilih "Ya" untuk mengonfirmasi pilihannya.

Mengatur elemen yang dipilih default dalam daftar dengan -default -item

Saat kami menggunakan daftar periksa atau widget menu, elemen pertama dalam daftar pilihan yang mungkin dipilih secara default. Dengan menggunakan --Default-item opsi dan merujuk suatu elemen, kita dapat menggunakannya sebagai default alternatif:

$ Dialog --Default-item 2 --CheckList "Pilih:" 0 0 5 \ 1 "Elemen Pertama" Mati \ 2 "Elemen Kedua" OFF \ 3 "Elemen Ketiga" Mati




Seperti yang Anda lihat, dalam contoh di atas, kami mereferensikan elemen dengan itu menandai, 2 Dalam hal ini (kami akan memperluas ini nanti).

Menentukan waktu tunda setelah konfirmasi: opsi tidur

Terkadang kita mungkin ingin aplikasi kita menunggu sejumlah detik setelah memproses kotak dialog. Untuk mencapai perilaku ini kita dapat menggunakan --tidur opsi dan berikan jumlah detik untuk menunggu sebagai nilai:

$ dialog --Sleep 3 - -inputBox "Masukkan nama Anda:" 0 0

Sebagai hasil dari perintah di atas, setelah kotak input widget ditampilkan, dan pengguna menyentuh MEMASUKI kunci, 3 detik ditunggu sebelum perintah berikutnya dalam skrip panggilan dilakukan.

Memberikan waktu tunggu pilihan

Dalam beberapa kasus kami mungkin ingin memberi pengguna jumlah maksimum detik untuk melakukan pilihannya. Aplikasi dialog menyediakan --waktu habis opsi untuk mendapatkan perilaku tersebut. Jumlah detik batas waktu harus disahkan sebagai argumen opsi. Jika setelah jumlah detik yang ditentukan asalkan pengguna tidak melakukan pilihannya, aplikasi akan keluar dengan status kesalahan:

$ dialog -Timeout 3 - -inputBox "Masukkan nama Anda:" 0 0

Mengatur label alternatif untuk tombol

Itu dialog Utilitas menyediakan serangkaian opsi untuk mengganti label default untuk tombol: kita dapat menggunakan --keluar-label, --Label ekstra, --bantuan-label, --tidak ada label, --OK-Label, --YA-LABEL untuk mengubah label "keluar", "ekstra", "bantuan", "tidak", "ok" dan "ya" tombol, masing -masing.

Masing -masing opsi yang disebutkan di atas mengambil string sebagai argumen, yang digunakan sebagai label tombol. Berikut adalah contoh penggunaan opsi:

$ dialog --Default-tombol "no" \ ---no-label "I Don't" \--yes-label "I do" \ ---besno "Apakah Anda benar-benar ingin memformat partisi?"0 0

Perintah di atas akan menghasilkan hasil berikut:





Widget dialog

Sampai sekarang kami melihat beberapa yang paling berguna dialog Opsi "umum". Sekarang kita akan melihat cara menggunakan beberapa widget yang tersedia secara detail. Sebelum melanjutkan, kita harus menentukan sintaks umum. Saat kami meluncurkan dialog, kami harus selalu memberikan tiga parameter:

  1. Teks yang akan ditampilkan di widget;
  2. Lebar widget;
  3. Tinggi widget;

Jika kami memberikan nilai 0 Untuk lebar atau tinggi, nilai atribut yang sesuai diatur secara otomatis.

Widget inputbox

Widget InputBox digunakan untuk meminta pengguna untuk menanggapi pertanyaan dengan input tekstual. Parameter teks digunakan untuk memberikan pertanyaan: Jika string lebih panjang dari kotak dialog, yang terakhir akan dapat digulir. Untuk menggunakan widget ini, kami memohon dialog dengan --kotak input pilihan:



Saat keluar, input yang disediakan oleh pengguna ditampilkan pada output dialog, yang secara default adalah Stderr.

Widget daftar periksa

Kami sudah melihat bagaimana widget daftar periksa terlihat dalam contoh sebelumnya: dalam jenis widget ini serangkaian pilihan diberikan kepada pengguna yang dapat memilih satu atau lebih dari mereka. Untuk menggunakan widget ini kita harus menggunakan --daftar periksa opsi, dan, selain parameter tiga standar yang harus diteruskan ke semua widget, kami harus memberikan juga Daftar-tinggi dan pilihan yang akan ditampilkan.



Itu tinggi garis Parameter digunakan untuk mengatur berapa banyak baris yang harus ditampilkan sekaligus: Jika jumlah garis kurang dari pilihan yang tersedia, menu akan menjadi gulir. Jika kami menyediakan 0 sebagai nilai dari tinggi garis Jumlah baris akan sesuai dengan jumlah pilihan.

Untuk setiap pilihan kita harus memberikan pengidentifikasi (tag), nama dan status yang bisa mati atau pada. Jika statusnya pada pilihan akan diperiksa secara default. Setelah kami mengkonfirmasi pilihan kami, tag yang terkait dengan entri yang kami periksa akan ditampilkan Stderr:

$ Dialog -CheckList "Pilih Item:" 0 0 0 \ 1 "Pilihan nomor satu" off \ 2 "Pilihan nomor dua" pada \ 3 "Pilihan nomor tiga" off \ 4 "Pilihan nomor empat" di

Dengan perintah di atas kami meluncurkan menu dengan 4 opsi, dan setel opsi 2 dan 4 diperiksa secara default. Output dari perintah adalah sebagai berikut:



Widget radiolist

Widget Radiolist diluncurkan saat dialog dipanggil dengan --Radiolist pilihan. Ini berfungsi mirip dengan widget daftar periksa, dengan perbedaan bahwa pilihan saling eksklusif, sehingga hanya satu elemen yang dapat dipilih. Inilah cara kami menggunakan widget:

$ dialog --Radiolist "Pilih Item:" 0 0 0 \ 1 "Pilihan nomor satu" off \ 2 "Pilihan nomor dua" di \ 3 "Pilihan nomor tiga" off \ 4 "Pilihan nomor empat" OFF OFF "


Karena pilihannya saling eksklusif, hanya opsi pertama yang ditetapkan Pada akan dipilih sebagai default.



Tanyakan kepada pengguna untuk kata sandi menggunakan widget Kata Sandi

Widget Kata Sandi digunakan untuk membiarkan pengguna meminta kata sandi. Untuk alasan keamanan, teks yang dimasukkan oleh pengguna tidak ditampilkan. Perilaku ini dapat dimodifikasi dengan menggunakan --merasa tidak aman Opsi: Jika kita lakukan, widget akan menampilkan tanda bintang untuk setiap huruf kata sandi yang dimasukkan di bidang yang sesuai.

Kami menggunakan widget dengan meluncurkan dialog dengan --Kotoran Kata Sandi pilihan:

$ dialog -insecure --passwordbox "Masukkan kata sandi Anda:" 0 0

Output dari perintah di atas adalah:



Menampilkan pesan dengan widget msgbox

Penggunaan widget ini sangat sederhana: dipanggil dengan memanggil dialog dengan --msgbox opsi dan menampilkan pesan yang merupakan konten dari teks parameter. Tunggal OKE Tombol ditampilkan:

$ dialog -msgbox "Ini adalah pesan yang sangat penting yang harus dibaca dengan cermat!"0 0




Widget Kalender

Kita dapat menggunakan widget kalender dengan memohon utilitas dialog dengan --kalender pilihan. Widget Mari kita pilih tanggal dengan memilih bulan, hari dan tahun yang ditampilkan di bagian widget yang terpisah. Dimungkinkan untuk memberikan tanggal default dengan meneruskannya sebagai bagian dari perintah.

Untuk memulai widget dengan "Hari Kelima Mei tahun 2020" sebagai tanggal default, misalnya, kami akan menjalankan perintah berikut:

$ Dialog --Calendar "Pilih Tanggal:" 0 0 27 05 2020

Ini akan menghasilkan output berikut:






Kita dapat bergerak di antara bagian widget menggunakan Tab kunci, dan ubah parameter dengan menggunakan tombol panah. Setelah kami mengkonfirmasi pilihan, itu ditampilkan Stderr dalam format hari/bulan/tahun; Ini dapat dimodifikasi dengan menggunakan --format tanggal opsi dengan format yang kompatibel dengan strftime ditentukan sebagai argumen. Untuk membuat output dalam format tahun/bulan/hari, misalnya, kami akan menjalankan:

$ dialog--tanggal-format%y/%m/%d --Calendar "Pilih tanggal" 0 0 27 05 2020

Meminta pengguna untuk konfirmasi: widget yesno

Kami sudah menemukan widget ini: memungkinkan kami meminta pengguna untuk konfirmasi. Saat menggunakannya, kami menentukan pertanyaan yang akan ditanyakan melalui teks parameter. Tergantung pada pilihan pengguna, status keluar dikembalikan: 0 Jika pengguna mengkonfirmasi dengan mengklik Ya tombol, 1 jika tidak.

Untuk memohon widget ini, kita harus menggunakan --ya Tidak pilihan:

$ dialog ---besno "apakah Anda mengkonfirmasi?"0 0

Ini widgetnya:



Mengelola output yang dihasilkan oleh widget

Secara default, output yang dihasilkan oleh widget ditampilkan di stderr, jadi misalnya, untuk menyimpan data yang diperoleh dari widget ke file, yang harus kita lakukan adalah mengarahkan ulang Stderr ke file tersebut (jika Anda tidak terbiasa dengan pengalihan, Anda mungkin ingin melihat tutorial Pengantar Bash Shell Redirections):

$ Dialog -CheckList "Pilih Item:" 0 0 0 \ 1 "Pilihan nomor satu" off \ 2 "Pilihan nomor dua" pada \ 3 "Pilihan nomor tiga" off \ 4 "Pilihan nomor empat" pada 2> pilihan.txt

Setelah pengguna mengkonfirmasi pilihannya, mereka akan ditulis, dipisahkan ruang pilihan.txt mengajukan.

Bagaimana jika kita ingin menyimpan pilihan langsung ke variabel? Untuk menyelesaikan tugas, kita harus menggunakan --stdout opsi, sehingga output widget ditampilkan Stdin alih-alih Stderr:

$ opsices = "$ (dialog --stdout --CheckList" Pilih item: "0 0 0 \ 1" Pilihan nomor satu "off \ 2" Pilihan nomor dua "pada \ 3" Pilihan nomor tiga "off \ 4" Nomor Pilihan " empat "aktif)"


Dalam contoh di atas, hasil pemrosesan widget, akan dapat diakses melalui pilihan variabel. Mungkin kita mungkin ingin mengulanginya:

$ untuk pilihan di $ pilihan; do echo "$ choice"; selesai 2 4

Untuk mengelola proses ya Tidak widget kita harus berperilaku berbeda. Widget tersebut, seperti yang sudah kita lihat, tidak menghasilkan output apa pun tetapi mengubah kode keluar dari perintah yang digunakan untuk melepasnya sesuai dengan pilihan pengguna. Jika pengguna mengkonfirmasi, dan menjawab dengan tegas pertanyaan, kode keluar diatur ke 0, sebaliknya untuk 1 (Ini mungkin tampak aneh, tapi ingat itu 0 cara OKE ketika 1 adalah status keluar yang berarti bahwa perintah tidak berhasil). Mengetahui hal ini kita bisa menulis sesuatu seperti:

jika dialog ---besno "Apakah Anda ingin membuka instance Gnome-terminal ?"0 0; lalu hapus fi terminal gnome 

Kesimpulan

Dalam tutorial ini kami melihat bagaimana kami dapat menggunakan dialog aplikasi untuk digunakan ncurses widget dalam skrip shell. Pertama -tama kami melihat beberapa opsi umum yang dapat digunakan secara independen dari jenis widget, daripada kami melihat beberapa widget secara khusus. Ada lebih banyak widget yang dapat digunakan dialog: Untuk daftar lengkap saya sarankan Anda untuk melihat manual aplikasi.

Tutorial Linux Terkait:

  • Hal -hal yang harus diinstal pada ubuntu 20.04
  • Cara mengintegrasikan kotak dialog dalam skrip shell dengan whiptail
  • Hal -hal yang harus dilakukan setelah menginstal ubuntu 20.04 FOSSA FOSSA Linux
  • Memulai dengan Tkinter untuk tutorial Python
  • Loop bersarang dalam skrip bash
  • Hal -hal yang harus diinstal pada Ubuntu 22.04
  • Perintah Linux: 20 perintah terpenting teratas yang Anda butuhkan untuk…
  • Hal -hal yang harus dilakukan setelah menginstal ubuntu 22.04 Jammy Jellyfish…
  • Perintah Linux Dasar
  • Instal Arch Linux di VMware Workstation