rus*_*ush 16
whiptail
在大多数基于 deb 的系统上默认安装,而dialog
没有安装。
Afair,基于 rpmwhiptail
也是默认对话框应用程序。
我想这对你很重要。
whiptail
从便携性的角度来看,这是正确的选择。
也是whiptail
基于newt
,而dialog
基于ncurses
。在我看来,第一个更漂亮(:
小智 10
然后是鞭尾。出于实用目的,它由 Debian 维护(其上游开发人员所做的工作很少)。它的文档 (README.whiptail) 声称
whiptail (1) 是dialog (1)的轻量级替代品,为 shell 脚本提供对话框。它基于 newt 窗口库而不是 ncurses 库构建,使其在安装程序、救援磁盘等嵌入式环境中更小。
whiptail 设计为 drop-in 兼容 dialog,但功能较少:一些对话框没有实现,如 tailbox、timebox、calendarbox 等。
比较实际大小(Debian 测试,2007/1/10):whiptail、newt、popt 和 slang 库的总大小为757 KB。对话 (计数 ncurses)的可比较数量 是 520 KB。无视第一段。
第二段具有误导性,因为 *whiptail** 也不适用于dialog 的常见选项,例如仪表框。 与 1990 年代中期的原始对话 0.4 程序相比,whiptail与对话的兼容性较差 。
例如,whiptail的联机帮助页借用了dialog 的功能 ,例如,但奇怪的是仅引用了 0.4 (1994) 以下的对话框版本作为来源。也就是说,它的联机帮助页引用了从最近版本的dialog借来的功能,例如,
--gauge (从 0.5)
--passwordbox(来自 1999 年的 Debian 更改),
--default-item(来自对话框2000/02/22),
--output-fd(来自对话框2002/08/14)。
有点幽默的是,人们可能会注意到使用“--”作为转义符的 popt功能(在其联机帮助页中未记录)在大约一年的时候在dialog的联机帮助页中记录,而在whiptail的联机帮助页中提到它之前。 whiptail的联机帮助页错误地将其归因于getopt(无论如何都是不准确的)。
(这不一定是一个答案,但由于代码量,我发布了这样的答案。我没有实际经验whiptail
。如果whiptail
用户在此发布经过测试的解决方案,稍后将删除它。)
正如Bash Shell Scripting/Whiptail所写:
从它的 README 来看: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
Run Code Online (Sandbox Code Playgroud)
(是的,对于安装在名称包含换行符的目录中的工具,上述检测将失败。我只是保持简单。)
小智 9
为什么不同时使用:
(需要 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...."
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
25606 次 |
最近记录: |