cambuk atau dialog

15

Saya akan membuat skrip yang akan menggunakan input pengguna, jadi saya memutuskan untuk menggunakan whiptail, tetapi sedikit bingung yang mana yang portable dan akan bekerja di ubuntu 10.x dan lebih tinggi dan CentOs5.x dan lebih tinggi.

Saya tahu read, tapi saya ingin dialog seperti alat, jadi kalau ada yang tahu alternatif lain, beri tahu saya.

Rahul Patil
sumber
bukankah whiptailrip-off dialog?
sjas

Jawaban:

12

whiptaildiinstal secara default pada sebagian besar sistem berbasis deb, sementara dialogtidak.

Setelah itu, pada berbasis rpm whiptailjuga merupakan aplikasi dialog default.

Saya kira itu penting bagi Anda.

Jadi whiptailadalah pilihan yang tepat dari sudut portabilitas.

Juga whiptaildidasarkan pada newt, sementara dialogdidasarkan pada ncurses. Dari sudut pandang saya, yang pertama lebih indah (:

buru-buru
sumber
baik untuk mengetahui info tambahan :)
Rahul Patil
2
The Script mungkin lebih atau kurang portabel, tetapi program dialog itu sendiri tidak kurang portabel dari whiptail.
Thomas Dickey
8

Mengapa tidak menggunakan keduanya:

(Membutuhkan bash 4)

#!/usr/bin/env bash
t(){ type "$1"&>/dev/null;}
function Menu.Show {
   local DIA DIA_ESC; while :; do
      t whiptail && DIA=whiptail && break
      t dialog && DIA=dialog && DIA_ESC=-- && break
      exec date +s"No dialog program found"
   done; declare -A o="$1"; shift
   $DIA --backtitle "${o[backtitle]}" --title "${o[title]}" \
      --menu "${o[question]}" 0 0 0 $DIA_ESC "$@"; }



Menu.Show '([backtitle]="Backtitle"
            [title]="Title"
            [question]="Please choose:")'          \
                                                   \
            "Option A"  "Stuff...."                \
            "Option B"  "Stuff...."                \
            "Option C"  "Stuff...."    
Orwellophile
sumber
1
Sangat rumit. Mengapa tidak sesuatu seperti ini: which whiptail && window=whiptail; which dialog && window=dialog; [ -z window ] && echo "no whiptail or dialog". Maka op hanya bisa melakukan `$ window --title foo --msgbox bar 87 5`.
James M. Lay
6

(Ini belum tentu merupakan jawaban, tetapi saya memposting karena jumlah kode. Saya tidak memiliki pengalaman praktis dengan whiptail. Akan menghapus ini nanti jika whiptailpengguna memposting solusi yang diuji pada ini.)

Seperti yang ditulis oleh Bash Shell Scripting / Whiptail :

Dari README-nya: whiptail dirancang agar kompatibel dengan dialog (1), tetapi memiliki lebih sedikit fitur: beberapa kotak dialog tidak diimplementasikan, seperti tailbox, timebox, calendarbox, dll.

Itu berarti Anda tidak harus memutuskan untuk satu atau yang lain. Cukup deteksi mana yang tersedia, lalu biarkan skrip menggunakannya:

# check whether whiptail or dialog is installed
# (choosing the first command found)
read dialog <<< "$(which whiptail dialog 2> /dev/null)"

# exit if none found
[[ "$dialog" ]] || {
  echo 'neither whiptail nor dialog found' >&2
  exit 1
}

# just use whichever was found
"$dialog" --msgbox "Message displayed with $dialog" 0 0

(Ya, deteksi di atas akan gagal pada alat yang diinstal di dalam direktori dengan nama yang mengandung karakter baris baru. Saya hanya membuatnya sederhana.)

manatwork
sumber
5

Menurut bagian KOMPATIBILITAS dari dialog (1) halaman buku panduan :

Lalu ada cambuk . Untuk tujuan praktis, ini dikelola oleh Debian (sangat sedikit pekerjaan yang dilakukan oleh pengembang hulu). Dokumentasinya (README.whiptail) mengklaim

whiptail (1) adalah pengganti dialog ringan (1), untuk menyediakan kotak dialog untuk skrip shell. Itu dibangun di perpustakaan windowt newt daripada perpustakaan ncurses, memungkinkan untuk menjadi lebih kecil di lingkungan tertanam seperti installer, disk penyelamat, dll.

whiptail dirancang agar kompatibel dengan dialog, tetapi memiliki lebih sedikit fitur: beberapa kotak dialog tidak diimplementasikan, seperti tailbox, kotak waktu, kotak kalender, dll.

Membandingkan ukuran aktual (pengujian Debian, 2007/1/10): Total ukuran untuk perpustakaan whiptail , newt, popt dan slang adalah 757 KB. Jumlah yang sebanding untuk dialog (menghitung ncurses) adalah 520 KB. Abaikan paragraf pertama.

Paragraf kedua menyesatkan, karena * whiptail ** juga tidak berfungsi untuk opsi dialog umum , seperti kotak ukur. whiptail kurang kompatibel dengan dialog daripada program 0,4 dialog pertengahan 1990-an yang asli.

manual whiptail meminjam fitur dari dialog , misalnya, tetapi anehnya hanya mengutip versi dialog hingga 0,4 (1994) sebagai sumber. Artinya, manualnya mengacu pada fitur yang dipinjam dari versi dialog yang lebih baru , misalnya,

  • --gauge (dari 0,5)

  • --passwordbox (dari perubahan Debian pada tahun 1999),

  • --default-item (dari dialog 2000/02/22),

  • --output-fd (dari dialog 2002/08/14).

Agak lucu, orang dapat mencatat bahwa fitur popt (tidak berdokumen di halaman manualnya) menggunakan "-" sebagai pelarian didokumentasikan dalam halaman dialog sekitar setahun sebelum disebutkan dalam manual whiptail . manual whiptail secara keliru mengaitkan itu dengan getopt (dan bagaimanapun juga tidak akurat).

Buo-Ren Lin
sumber