Saya ingin membuat lingkungan berbasis terminal untuk mengadaptasi skrip Bash saya . Saya ingin terlihat seperti ini:
terminal
text-user-interface
tempforFind Me In The Woods
sumber
sumber
dialog
, yang tampaknya digunakan untuk hal ini.dialog
menampilkan menu (tetapi menerima penerimaan) ketika dimulai melalui ekspresi substitusi perintah?whiptail
>dialog
jugatui
untuk mode split-window-nya (menunjukkan register, sumber, dan perintah denganlayout reg
misalnya, dantui reg vec
untuk menunjukkan register vektor di jendela reg (dengan cara yang tidak fleksibel, sehingga bagian itu tidak terlalu berguna: /) IDK jika Redhat menulis tambalan yang menambahkan fitur itu, atau bahkan berapa usianyaJawaban:
Respons pengguna disimpan dalam kode keluar, sehingga dapat dicetak seperti biasa:
echo $?
(perhatikan itu0
berarti "ya", dan1
"tidak" di dunia shell).Mengenai pertanyaan lain dari bagian komentar:
untuk memasukkan ke dalam kotak dialog output dari beberapa perintah cukup gunakan mekanisme substitusi perintah
$()
, misalnya:untuk memberikan pilihan ganda kepada pengguna, Anda bisa menggunakan
--menu
opsi alih-alih--yesno
untuk menyimpan output dari pilihan pengguna ke dalam variabel, seseorang perlu menggunakan
--stdout
opsi atau mengubah deskripsi output baik melalui--output-fd
atau secara manual, misalnya:Trik ini diperlukan karena
dialog
secara default output ke stderr, bukan stdout.Dan seperti biasa,
man dialog
adalah temanmu.sumber
?
variabel, cobaecho $?
.parted -l
kepada pengguna melalui kotak dialog, maka mungkin opsi--menu
adalah pilihan yang lebih baik daripada-yesno
. Dalam kasus seperti itu Anda harus bermain sedikit dengan deskriptor untuk menyimpan output ke dalam variabel, misalnya:output=$(dialog --backtitle "Package configuration" --title "Configuration sun-java-jre" --menu "$(parted -l)" 15 40 4 1 "sda1" 2 "sda2" 3 "sda3" 3>&1 1>&2 2>&3 3>&-); echo $output
--stdout
opsi.man dialog
Tangkapan layar dalam pertanyaan tersebut terlihat seperti whiptail (program yang secara fungsional dikurangi dengan meniru dialog , menggunakan newt daripada ncurses ). Cara judul dan tombol ditampilkan di setiap program, membuatnya terlihat berbeda.
Berikut ini adalah skrip yang menduplikasi tangkapan layar asli, baik untuk whiptail atau dialog:
dan untuk perbandingan, tangkapan layar dengan cambuk:
dan dengan dialog:
Selain tampilan berbeda dari judul dan tombol, dialog menggunakan warna yang berbeda secara default (meskipun itu dapat dikonfigurasiā lihat tangkapan layar ), dan menggunakan lebih sedikit garis pada layar.
dialog (dan cambuk) menggunakan pustaka untuk mengelola tampilan garis, warna, dll. Tetapi Anda juga dapat melihat kadal yang digunakan dalam program anaconda Red Hat sebagai pustaka bersama yang disebut dari python (dengan tampilan yang sama). Sepanjang baris yang sama, program konfigurasi kernel dimulai sebagai salinan dialog (cut-down), dan kemudian berevolusi menjadi fitur menggunakan pustaka bersama (tanpa
lxdialog
program asli ) seperti cara newt digunakan dari python.Dari bash - Anda bisa menggunakan dialog atau whiptail untuk fitur yang paling umum digunakan. Seseorang menulis pembungkus untuk mereka (dalam perl) untuk memungkinkan skrip untuk lebih mudah menggunakan keduanya atau beberapa lainnya, tetapi Anda lebih baik menggunakan dialog langsung karena modul perl pada dasarnya adalah common-denominator.
Sumber dialog termasuk contoh semua widget bersama dengan sebagian besar opsi baris perintah:
Bacaan lebih lanjut:
sumber
Saya percaya paket yang Anda cari adalah ncurses .
Wikipedia menggambarkan ncurses sebagai berikut:
Ini banyak digunakan, misalnya, di alat konfigurasi kernel menuconfig:
Karena Anda menggunakan bash, Anda dapat menggunakan Bash Simple Curses (seperti yang disebutkan oleh Runium dalam komentar di bawah).
sumber
ncurses
adalah sebuah C-library. (Jika saya mengerti dengan benar) OP ingin lingkungan skrip (untuk bash).menuconfig
ditulis dalam C. Sebagai alternatifdialog
, sesuai jawaban lain, Anda mungkin bisa menyebutkan Bash Simple Curses yang ditulis dalam bash (mengandalkantput
).ncurses
ini adalah dasar dari ini, dan itu menjawab versi yang lebih umum dari pertanyaan ... seperti yang ada di judul di sini :)kenyamanan
.
.
antarmuka pengguna grafis lainnya (gui)
menghentikan eksekusi skrip lebih lanjut, hentikan. baris: echo $? , tidak akan pernah terjadi
sumber