鞭尾或对话


15

我将创建使用用户输入的脚本,因此我决定使用whiptail,但是有点混淆了哪一种是可移植的并且可以在ubuntu 10.x和更高版本以及CentOs5.x和更高版本中工作。

我知道read,但是我想要像工具一样的对话框,所以如果有人知道任何替代方法,就让我知道。


wasnt whiptail敲竹杠关dialog
sjas

Answers:


12

whiptail默认情况下,大多数基于deb的系统上都安装了该工具,而dialog没有安装。

Afair,基于rpm whiptail也是默认对话框应用程序。

我想这对你很重要。

所以,whiptail从便携性的角度正确的选择。

whiptail基于newt,而dialog基于ncurses。在我看来,第一个更漂亮(:


知道更多信息:)
Rahul Patil

2
脚本可能或多或少具有移植性,但是对话程序本身的移植性却不亚于鞭子。
Thomas Dickey

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`。
James M. Lay

6

(这不一定是答案,但是由于代码量过多,我还是这样发布的。我没有实际的经验whiptail。如果whiptail用户对此发布测试过的解决方案,则稍后将其删除。)

正如Bash Shell脚本/马尾写道:

从其自述文件中可以看出:whiptail被设计为与dialog(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

根据dialog(1)手册页COMPATIBILITY部分

然后是鞭尾。出于实际目的,它由Debian维护(上游开发人员几乎没有做任何工作)。它的文档(README.whiptail)声明

whiptail(1)是对话框(1)的轻量级替代品,为shell脚本提供了对话框。它基于newt窗口库而不是ncurses库构建,从而使其在嵌入式环境(例如安装程序,应急磁盘等)中更小。

鞭尾旨在与对话框直接兼容,但功能较少:未实现某些对话框,例如尾盒,时间盒,日历盒等。

比较实际大小(Debian测试,2007/1/10):whiptail,newt,popt和slang库的总大小为757 KB。对话框 (可计算ncurses)的可比较数字为 520 KB。忽略第一段。

第二段具有误导性,因为* whiptail **不适用于对话框的常用选项,例如仪表框。 与 1990年代中期的原始对话0.4程序相比,whiwhitail对话的兼容性较差 。

whiptail的联机帮助页借用了dialog的功能 ,例如,但奇怪的是仅引用了最高版本为0.4(1994)的对话框版本。也就是说,其联机帮助页是指从对话框的最新版本中借用的功能,例如,

  • -规(从0.5起)

  • --passwordbox(摘自1999年的Debian更改),

  • --default-item(来自对话框2000/02/22),

  • --output-fd(来自对话框 2002/08/14)。

有点幽默的是,有人可能注意到在对话的手册页中提到“-”作为转义符的popt功能(在手册页中未记录),大约在whiptail的手册页中提到过之前一年。 whiptail的联机帮助页错误地将其归因于getopt(并且还是不准确的)。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.