whiptail або діалог


15

Я збираюся створити скрипт, який буде використовувати введення користувача, тому я вирішив використовувати whiptail, але трохи плутати той, який є портативним, і буде працювати в ubuntu 10.x і вище та CentOs5.x і вище.

Я знаю read, але я хочу діалог, як інструмент, тому якщо хтось знає якусь альтернативу, просто дайте мені знати.


хіба whiptailне відірвав dialog?
sjas

Відповіді:


12

whiptailвстановлено за замовчуванням у більшості систем, заснованих на деб, поки dialogце не так.

Afair, на основі оборотів на хвилину whiptail , також є діалоговим додатком за замовчуванням.

Я думаю, це має значення для вас.

Так whiptail правильний вибір з точки зору мобільності.

Також whiptailзаснований на newt, а dialogзаснований на ncurses. З моєї точки зору, перша є красивішою (:


приємно знати додаткову інформацію :)
Рахул Патіль

2
Сценарій може бути більш-менш стерпним, але сам діалог програма не менше компактна , ніж Хлистохвост.
Томас Дікі

8

Чому б не використовувати обидва:

(Потрібен удар 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...."    

1
Так складно. Чому не що - щось на зразок цього: which whiptail && window=whiptail; which dialog && window=dialog; [ -z window ] && echo "no whiptail or dialog". Тоді оператор може просто виконати `$ window --title foo - бар смуги 87 5`.
Джеймс М. Лежав

6

(Це не обов'язково відповідь, але я розмістив його як такий через кількість коду. Я не маю практичного досвіду whiptail . Видаляю це пізніше, якщо whiptailкористувач перевірене рішення щодо цього.)

Як пише сценарій / Whiptail Bash Shell :

З його README: whiptail розроблений таким чином, щоб він був сумісний із діалоговим вікном (1), але має менше можливостей: деякі діалогові вікна не реалізовані, наприклад хвостова скринька, часова скринька, календарна скринька тощо.

Це означає, що вам не обов’язково потрібно зважитися на те чи інше. Просто визначте, який з них доступний, тоді дозвольте сценарію його використовувати:

# 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

(Так, вищевказане виявлення не вдасться в інструментах, встановлених всередині каталогів з іменем, що містить символи нового рядка. Я просто простий.)


5

Відповідно до розділу СУСПІЛЬНІСТЬ діалогової сторінки (1) діалогового вікна :

Потім з’являється батог . У практичних цілях його підтримує Debian (дуже мало роботи роблять його розробники вгору). Його документація (README.whiptail) заявляє

whiptail (1) - це легка заміна діалогу (1), щоб забезпечити діалогові вікна для скриптів оболонки. Він побудований на бібліотеці вікон newt, а не на бібліотеці ncurses, що дозволяє йому бути меншими у вбудованих середовищах, таких як інсталятори, рятувальні диски тощо.

whiptail розроблений таким чином, щоб він був сумісний із діалоговим вікном, але має менше можливостей: деякі діалогові вікна не реалізовані, наприклад хвостова скринька, часова скринька, скринька тощо.

Порівнюючи фактичні розміри (Debian testing, 2007/1/10): Загальна кількість розмірів для бібліотек whiptail , newt, popt та sleng становить 757 Кб. Порівняльне число для діалогового вікна (підрахунок ncurses) - 520 Кб. Нехтуйте першим пунктом.

Другий абзац вводить в оману, оскільки * whiptail ** також не працює для загальних параметрів діалогового вікна , таких як поле вимірювання. whiptail менш сумісний із діалоговим діапазоном, ніж оригінальний діалог середини 1990-х 0.4.

manpage сторінка whiptail запозичає функції з діалогового вікна , наприклад, але як не дивно, в якості джерела наводить лише діалогові версії до 0,4 (1994). Тобто, його сторінка стосується функцій, запозичених із новіших версій діалогу , наприклад,

  • - манометр (від 0,5)

  • --passwordbox (із змін Debian у 1999 р.),

  • - за замовчуванням (з діалогового вікна 2000/02/22),

  • --output-fdдіалогового вікна 2002/08/14).

Дещо з гумором можна відзначити, що особливість Popt (недокументована на його сторінці) про використання "-" як втечі була задокументована у вікні діалогу приблизно за рік до того, як вона була згадана на сторінці " whiptail ". Хлистохвост «s неправильно атрибути сторінок Довідника , що Getopt (і є неточним в будь-якому випадку).

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.