хлыст или диалог


15

Я собираюсь создать скрипт, который будет использовать пользовательский ввод, поэтому я решил использовать whiptail, но немного путаю тот, который является переносимым и будет работать в Ubuntu 10.x и выше и CentOs5.x и выше.

Я знаю read, но мне нужен инструмент, похожий на диалог, поэтому, если кто-нибудь знает какую-либо альтернативу, просто дайте мне знать.


не whiptailбыл ли плагиат dialog?
Sjas

Ответы:


12

whiptailустанавливается по умолчанию в большинстве систем на основе deb, в то время dialogкак нет.

Afair, на основе rpm whiptailтакже является диалоговым приложением по умолчанию.

Я думаю, это важно для вас.

Так whiptailчто это правильный выбор с точки зрения мобильности.

Также whiptailосновано на newt, пока dialogосновано на ncurses. С моей точки зрения, первый более красивый (:


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

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

8

Почему бы не использовать оба:

(Требуется 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...."    

1
Так сложно. Почему не как то так which whiptail && window=whiptail; which dialog && window=dialog; [ -z window ] && echo "no whiptail or dialog". Тогда операция может просто выполнить `$ window --title foo --msgbox bar 87 5`.
Джеймс М. Лэй

6

(Это не обязательно ответ, но я написал как таковой из-за объема кода. У меня нет практического опыта whiptail. Удалите это позже, если whiptailпользователь опубликует проверенное решение по этому вопросу.)

Как пишет Bash Shell Scripting / Whiptail :

Из README: whiptail спроектирован так, чтобы быть совместимым с диалоговым окном (1), но имеет меньше возможностей: некоторые диалоговые окна не реализованы, такие как tailbox, timebox, calendarbox и т. Д.

Это означает, что вам не обязательно выбирать одно или другое. Просто определите, какой из них доступен, и дайте сценарию использовать его:

# 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) является легкой заменой dialog (1), чтобы обеспечить диалоговые окна для сценариев оболочки. Он построен на библиотеке окон newt, а не на библиотеке ncurses, что позволяет ему быть меньше во встроенных средах, таких как установщики, аварийные диски и т. Д.

whiptail разработан для совместимости с диалогом, но имеет меньше функций: некоторые диалоговые окна не реализованы, такие как tailbox, timebox, calendarbox и т. д.

Сравнивая фактические размеры (тестирования Debian, 2007/1/10): В общей сложности размеров для Хлыстохвост , тритон, Popt и библиотеки Сленг 757 KB. Сопоставимое число для диалога (считая ncurses) составляет 520 КБ. Не обращайте внимания на первый абзац.

Второй абзац вводит в заблуждение, поскольку * whiptail ** также не работает для общих параметров диалога , таких как поле индикатора. whiptail менее совместим с диалогами, чем оригинальная программа диалога 0.4 в середине 1990-х годов.

Man -страница whiptail заимствует функции из диалога , например, но странным образом приводит в качестве источника только версии диалога до 0.4 (1994). То есть его страница руководства относится к функциям, которые были заимствованы из более поздних версий диалога , например,

  • - датчик (от 0,5)

  • --passwordbox (из изменений Debian в 1999 году),

  • --default-item (из диалога 2000/02/22),

  • --output-fd (из диалога 2002/08/14).

С некоторой долей юмора можно заметить, что функция popt (недокументированная на ее man-странице) использования "-" в качестве escape была задокументирована на man-странице диалога примерно за год до того, как она была упомянута на man- странице whiptail. Страница man whiptail неправильно приписывает это getopt (и в любом случае является неточным).

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.