我将创建使用用户输入的脚本,因此我决定使用whiptail,但是有点混淆了哪一种是可移植的并且可以在ubuntu 10.x和更高版本以及CentOs5.x和更高版本中工作。
我知道read
,但是我想要像工具一样的对话框,所以如果有人知道任何替代方法,就让我知道。
我将创建使用用户输入的脚本,因此我决定使用whiptail,但是有点混淆了哪一种是可移植的并且可以在ubuntu 10.x和更高版本以及CentOs5.x和更高版本中工作。
我知道read
,但是我想要像工具一样的对话框,所以如果有人知道任何替代方法,就让我知道。
Answers:
whiptail
默认情况下,大多数基于deb的系统上都安装了该工具,而dialog
没有安装。
Afair,基于rpm whiptail
也是默认对话框应用程序。
我想这对你很重要。
所以,whiptail
从便携性的角度正确的选择。
也whiptail
基于newt
,而dialog
基于ncurses
。在我看来,第一个更漂亮(:
为什么不同时使用:
(需要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...."
which whiptail && window=whiptail; which dialog && window=dialog; [ -z window ] && echo "no whiptail or dialog"
。然后操作可以执行`$ window --title foo --msgbox bar 87 5`。
(这不一定是答案,但是由于代码量过多,我还是这样发布的。我没有实际的经验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
(是的,上述检测将无法在名称中包含换行符的目录内安装的工具上进行。我只是简单起见。)
根据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(并且还是不准确的)。
whiptail
敲竹杠关dialog
?