Peitschenschwanz oder Dialog

15

Ich werde ein Skript erstellen, das Benutzereingaben verwendet, also habe ich mich für Whiptail entschieden, aber ein bisschen verwirrt, welches davon portabel ist und in Ubuntu 10.x und höher und CentOs5.x und höher funktioniert.

Ich weiß read, aber ich möchte ein dialogähnliches Tool. Wenn jemand eine Alternative kennt, lass es mich wissen.

Rahul Patil
quelle
war keine whiptailAbzocke dialog?
Sjas

Antworten:

12

whiptailist auf den meisten deb-basierten Systemen standardmäßig installiert, dialognicht jedoch.

Auf RPM-Basis whiptailist auch die Standard-Dialog-App.

Ich denke, es ist wichtig für dich.

Unter whiptaildem Gesichtspunkt der Portabilität ist dies die richtige Wahl.

Auch whiptailbasiert auf newt, während dialogbasiert auf ncurses. Aus meiner Sicht ist der erste schöner (:

eilen
quelle
Gut zu wissen, zusätzliche Informationen :)
Rahul Patil
2
Das Skript kann mehr oder weniger portabel sein, aber das Dialogprogramm selbst ist nicht weniger portabel als Whiptail.
Thomas Dickey
8

Warum nicht beide verwenden:

(Benötigt 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
quelle
1
So kompliziert. Warum nicht etwas wie folgt aus : which whiptail && window=whiptail; which dialog && window=dialog; [ -z window ] && echo "no whiptail or dialog". Dann kann die Operation einfach "$ window --title foo --msgbox bar 87 5" ausführen.
James M. Lay
6

(Dies ist nicht unbedingt eine Antwort, aber ich habe aufgrund der Menge an Code als solche gepostet. Ich habe keine praktischen Erfahrungen damit whiptail. Wird später gelöscht, wenn ein whiptailBenutzer eine getestete Lösung dazu postet.)

Wie Bash Shell Scripting / Whiptail schreibt:

In der README-Datei heißt es: whiptail ist so konzipiert, dass es mit dialog (1) kompatibel ist, verfügt jedoch über weniger Funktionen: Einige Dialogfelder, z. B. tailbox, timebox, calendarbox usw., sind nicht implementiert.

Das heißt, Sie müssen sich nicht unbedingt für das eine oder andere entscheiden. Ermitteln Sie einfach, welches verfügbar ist, und lassen Sie das Skript es verwenden:

# 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

(Ja, die obige Erkennung schlägt bei Tools fehl, die in Verzeichnissen installiert sind, deren Name Zeilenumbrüche enthält. Ich habe es einfach gehalten.)

Mann bei der Arbeit
quelle
5

Entsprechend dem Abschnitt KOMPATIBILITÄT der Manualpage dialog (1) :

Dann ist da noch der Peitschenschwanz . Aus praktischen Gründen wird es von Debian gewartet (sehr wenig Arbeit wird von den vorgelagerten Entwicklern geleistet). Die Dokumentation (README.whiptail) behauptet

whiptail (1) ist ein kompakter Ersatz für dialog (1), um Dialogfelder für Shell-Skripte bereitzustellen. Es basiert auf der Newt-Fensterbibliothek und nicht auf der ncurses-Bibliothek, sodass es in eingebetteten Umgebungen wie Installern, Rettungsdisketten usw. kleiner sein kann.

whiptail ist so konzipiert, dass es mit Dialogen kompatibel ist, verfügt jedoch über weniger Funktionen: Einige Dialogfelder, wie z. B. Tailbox, Timebox, Calendarbox usw., sind nicht implementiert.

Vergleich der tatsächlichen Größen (Debian-Tests, 10.01.2007): Die Gesamtgröße der Whiptail- , Newt-, Popt- und Slang-Bibliotheken beträgt 757 KB. Die vergleichbare Anzahl für den Dialog (ncurses zählen) ist 520 KB. Ignorieren Sie den ersten Absatz.

Der zweite Absatz ist irreführend, da * whiptail ** auch funktioniert nicht für allgemeine Optionen von Dialog , wie das Spurfeld. whiptail ist mit dialog weniger kompatibel als das ursprüngliche dialog 0.4-Programm von Mitte der neunziger Jahre.

Die Manpage von whiptail leiht sich Funktionen aus dem Dialog , nennt aber seltsamerweise nur Dialogversionen bis 0.4 (1994) als Quelle. Das heißt, die Manpage verweist auf Funktionen, die aus neueren Versionen des Dialogs entlehnt wurden , z.

  • --lehre (ab 0,5)

  • --passwordbox (von Debian-Änderungen im Jahr 1999),

  • --default-item (aus dem Dialog 2000/02/22),

  • --output-fd (aus dem Dialog 2002/08/14).

Ein wenig humorvoll ist zu bemerken, dass die Popt- Funktion (undokumentiert in der Manpage), ein "-" als Escape zu verwenden, in der Manpage von dialog etwa ein Jahr vor der Erwähnung in der Manpage von whiptail dokumentiert wurde. Die Manpage von whiptail schreibt fälschlicherweise zu getopt (und ist ohnehin ungenau).

Buo-Ren Lin
quelle