whiptail lub dialog

15

Zamierzam stworzyć skrypt, który będzie wykorzystywał dane wejściowe użytkownika, więc zdecydowałem się użyć whiptail, ale trochę mylę ten, który jest przenośny i będzie działał w Ubuntu 10.x i wyższych oraz CentOs5.x i wyższych.

Wiem read, ale chcę narzędzie podobne do dialogu, więc jeśli ktoś zna jakąś alternatywę, daj mi znać.

Rahul Patil
źródło
nie whiptailbyło zdzierstwo dialog?
sjas

Odpowiedzi:

12

whiptailjest instalowany domyślnie w większości systemów opartych na Deb, podczas gdy dialognie jest.

Afair, na bazie RPM whiptailjest również domyślną aplikacją dialogową.

Myślę, że to ma dla ciebie znaczenie.

whiptailJest to więc właściwy wybór z punktu widzenia przenośności.

whiptailOpiera się również na newt, a dialogopiera się na ncurses. Z mojego punktu widzenia pierwszy jest piękniejszy (:

wysypka
źródło
dobrze wiedzieć dodatkowe informacje :)
Rahul Patil
2
Skrypt może być mniej lub bardziej przenośne, ale program dialog sam w sobie jest nie mniej mobilny niż tejowatych.
Thomas Dickey,
8

Dlaczego nie skorzystać z obu:

(Wymaga 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
źródło
1
Takie skomplikowane. Może coś takiego: which whiptail && window=whiptail; which dialog && window=dialog; [ -z window ] && echo "no whiptail or dialog". Wtedy op może po prostu zrobić `$ window --title foo - msgbox bar 87 5`.
James M. Lay
6

(To niekoniecznie jest odpowiedź, ale opublikowałem jako taki ze względu na ilość kodu. Nie mam praktycznego doświadczenia z whiptail. Usunie to później, jeśli whiptailużytkownik opublikuje testowane rozwiązanie).

Jak pisze Bash Shell Scripting / Whiptail :

Z pliku README: whiptail jest zaprojektowany tak, aby był kompatybilny z oknem dialogowym (1), ale ma mniej funkcji: niektóre okna dialogowe nie są zaimplementowane, takie jak tailbox, timebox, kalendarz itp.

Oznacza to, że niekoniecznie musisz decydować o jednym lub drugim. Po prostu wykryj, który jest dostępny, a następnie pozwól skryptowi go użyć:

# 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

(Tak, powyższe wykrycie nie powiedzie się w przypadku narzędzi zainstalowanych w katalogach o nazwie zawierającej znaki nowego wiersza. Po prostu to proste.)

człowiek w pracy
źródło
5

Zgodnie z sekcją KOMPATYBILNOŚĆ strony podręcznika dialogowego (1) :

Potem jest whiptail . Ze względów praktycznych jest utrzymywany przez Debiana (bardzo mało pracy wykonują jego programiści). Jego dokumentacja (README.whiptail) twierdzi

whiptail (1) jest lekkim zamiennikiem okna dialogowego (1), zapewniającym okna dialogowe dla skryptów powłoki. Jest oparty na bibliotece traszki, a nie na bibliotece ncurses, dzięki czemu może być mniejszy w środowiskach osadzonych, takich jak instalatory, dyski ratunkowe itp.

Whiptail jest zaprojektowany tak, aby był kompatybilny z oknami dialogowymi, ale ma mniej funkcji: niektóre okna dialogowe nie są zaimplementowane, takie jak tailbox, timebox, kalendarz itp.

Porównywanie rzeczywistych rozmiarów (testy Debiana, 2007/1/10): Łączna wielkość bibliotek whiptail , traszka, popt i slang wynosi 757 KB. Porównywalna liczba dla okna dialogowego (liczenie ncurses) wynosi 520 KB. Zignoruj ​​pierwszy akapit.

Drugi akapit jest mylący, ponieważ * whiptail ** również nie działa w przypadku typowych opcji dialogu , takich jak pole miernika. whiptail jest mniej kompatybilny z dialogiem niż oryginalny program 0.4 z połowy lat 90.

Strona podręcznika whiptail pożycza funkcje z okna dialogowego , ale dziwnie podaje jako źródło tylko wersje dialogowe do 0.4 (1994). Oznacza to, że jego strona odnosi się do funkcji, które zostały zapożyczone z nowszych wersji okna dialogowego , np.

  • - wskaźnik (od 0,5)

  • --passwordbox (od zmian Debiana w 1999 r.),

  • - pozycja domyślna (z okna dialogowego 2000/02/22),

  • --output-fd (z okna dialogowego 2002/08/14).

W nieco humorystyczny sposób można zauważyć, że funkcja popt (nieudokumentowana na stronie podręcznika) polegająca na użyciu znaku „-” jako ucieczki została udokumentowana na stronie podręcznika dialogowego około rok wcześniej, zanim została wspomniana na stronie podręcznika whiptail . Strona man whiptail niepoprawnie przypisuje to getopt (i tak czy inaczej jest niedokładna).

Buo-Ren Lin
źródło