dialog 使用命令行来生成文本样式窗口,它的风格如下图所示:
![]()
dialog 命令支持许多对话框小部件(widget),这些小部件如下表所列:
小部件 | 描述 | calendar | 提供了一个可以在其中选择日期的日历 | checklist | 显示多个项目,这些项目均可以被打开或关闭 | form | 允许建立一个可以填写标签和文本字段的表单 | fselect | 提供一个文本选择窗口以浏览文件 | gauge | 显示一个说明完成百分比的仪表 | infobox | 显示信息而不等待响应 | inputbox | 显示单一的文本窗体框以输入文本 | inputmenu | 提供一个可编辑的菜单 | menu | 显示一系列可供选择的选项 | msgbox | 显示消息并要求用户选择OK按钮 | pause | 显示一个说明指定暂停阶段状态的仪表 | passwordbox | 显示一个可以隐藏输入文本的单一文本框 | passwordform | 显示一个带标签和隐藏文本字段的表单 | radiolist | 提供一组菜单项,但是只可选择一个项目 | tailbox | 利用 tail 命令在滚动的窗口中显示文件中的文本 | tailboxbg | 与 tailbox 相同,但是需要在背景模式下操作 | texbox | 在滚动窗口中显示文件的内容 | timebox | 提供一个用来选择时、分、秒得窗口 | yesno | 提供一个含有 Yes/No 按钮的简单消息 |
使用 dialog 显示小部件命令格式:
dialog --widget parameters
其中 widget 就是上表所列出的小部件;后面的 parameters 参数可以查看 man 来参考。
小部件的输出结果通过两种形式提供:
使用退出代码状态示例:
$dialog --yesno "are you ok?" 10 20
选择 NO 按钮后查看退出代码:
$ echo $?
1
使用标准错误 STDERR 返回输出示例:$dialog --inputbox "Input your wish:" 10 20 2>wish.txt 这样在 inputbox 中输入的内容会输出到 wish.txt 文件中。
textbox 这个小部件可以在窗口内显示大量信息,如果内容过多,它还能滚动显示,使用方法:$ dialog --textbox /etc/passwd 15 45 效果如下图所示:
![]()
菜单小部件 --menu 使用格式:
--menu text height width menu-height [ tag item ] ...
示例:$ dialog --menu "System Admin" 20 30 10 1 "Diskspace" 2 "memory usage" 3 "clean rubish" 4 "check a log" 效果:
![]()
第 1 个参数是这个菜单的标题。
第 2 个参数菜单的高度。
第 3 个参数是菜单的宽度。
第 4 个参数是菜单可以容纳的选择条数。
第 5 个参数这里就是 tag,就是 1,2,3,4 这些标签。
第 6 个参数就是 item ,表示菜单选项。
当选择 OK 退出后,选择结果会发往 STDERR,当然选择结果不是菜单 item 字符串,而是标签 tag 。
fselect 小部件可以用来浏览整个目录以选择文件,使用方法如:$ dialog --title "select a file" --fselect $HOME/ 10 50 2>file.txt 效果:
![]()
其中 --title "select a file" 指定了该部件的标题。
--fselect 后的第 1 个参数(这里是 $HOME/) 指定了窗口使用的起始位置,这里为我的家目录。上图中的左侧窗口是目录列表,而右侧窗口中是左侧窗口中所选择目录下面的所有文件列表。在左侧窗口中可以通过两次空格键以打开一个目录,还可以通过文本框中直接输入要选择的目录或文件。该小部件的通过 STDERR 来输出,输出内容为所选择的内容。
上面,在 fselect 中使用了一个 --title 选项,它给出了 fselect 窗口的标题,实际上还有很多这样的设置选项,它们允许自定义窗口的外观和行为,下标列出这些选项:
选项 | 描述 | --add-widged | 除非按Esc或Cancel键,否则继续进入下一个对话框 | --aspect ratio | 指定窗口宽度/高度的纵横比 | --backtitle title | 指定在屏幕顶部、背景上显示的标题 | --begin x y | 指定窗口左上角的起始位置 | --cancel-label label | 为 Cancel 按钮指定一个可供选择的标签 | --clear | 使用对话框默认背景色清除显示 | --colors | 允许在对话框文本中嵌入 ANSI 颜色代码 | --cr-wrap | 允许在对话框文本中加入换行符,强制换行 | --create-rc file | 转储样本配置文件至指定文件 | --defaultno | 将 yes/no 对话框默认值设置为 NO | --default-item string | 设置检查列表、表单或菜单对话框的默认项目 | --exit-label lable | 为 Exit 按钮指定可供选择的标签 | --help | 显示 dialog 命令的帮助信息 | --help-button | 在 OK 和 Cancel 按钮之后显示 help 按钮 | --help-label label | 为 help 按钮指定可供选择的标签 | --help-status | 在 help 按钮中的帮助信息被选中后,记录下检查列表、单选框列表或表单信息 | --ignore | 忽略 diglog 不能识别的选项 | --input-fd fd | 除 STDIN 之外,指定其他可供选择的文件描述符 | ---insecure | 更改 password 小部件以在输入时以星号显示 | --item-help | 在屏幕的底部,为检查列表、单选框列表、菜单中的每一个标签添加该标签的帮助 | --keep-window | 不要清除屏幕上的旧小部件 | --max-input size | 指定输入字符串的最大数,默认为2048 | --nocancel | 禁止 cancel 按钮 | --no-collapse | 在对话框文本中,不要将制表换行符转换为空格 | --no-kill | 将 tailboxbg 对话框放在背景中,并禁止该进程的 SIGHUP | --no-label label | 为 No 按钮指定一个可供选择的标签 | --no-shadow | 不要为对话框窗口显示阴影 | --ok-label label | 为 OK 按钮指定一个可供选择的标签 | --output-fd fd | 除了 STDERR 之外,指定可供选择的输出文件描述符 | --print-maxsize | 打印对话框窗口允许输出的最大尺寸 | --print-size | 将每个对话框窗口的尺寸打印至输出 | --print-version | 将对话框版本打印至输出 | --separator-output | 无需引用,将 checklist 小部件的结果一次一行的输出 | --separator-widget string | 指定一个字符串来隔离每个小部件的输出 | --shadow | 绘制阴影至每一个窗口的右下方 | --single-quoted | 需要时对检查列表输出使用单引用 | --sleep sec | 在处理对话框窗口后延迟指定的秒数 | --stderr | 将输出发送至 STDERR (默认行为) | --stdout | 将输出发送至 STDOUT | --tab-correct | 将换行符转换为空格 | --tab-len n | 指定一个制表符所使用的空格数(默认值为8) | --timeout sec | 指定在没有用户输入的情况下,用错误代码退出所需的秒数 | --title title | 指定对话框的窗口名称 | --trim | 删除对话框文本中字符串首部的空格和换行符 | --visit-items | 为了把项目列表包含在内,而修改对话框窗口中的制表符 | --yes-label label | 为 yes 按钮指定一个可供选择的标签 | --extra-label label | 为 Extra 按钮指定可供选择的标签 | --extra-button | 在 OK 和 Cancel 按钮之间,显示一个其他的按钮 | --separator string | 指定一个字符串来隔离每个小部件的输出 |
在脚本使用 dialog :
[Bash shell] 纯文本查看 复制代码 #!/bin/bash
temp=`mktemp -t test.XXXXXX`
temp2=`mktemp -t test2.XXXXXX`
function diskspace {
df -k > $temp
dialog --textbox $temp 20 60
}
function whois {
whoami > $temp
dialog --textbox $temp 20 50
}
function memusage {
cat /proc/meminfo > $temp
dialog --textbox $temp 20 50
}
while [ 1 ]
do
dialog --menu "System Admin" 20 30 10 1 "Disk space" 2 "who is" 3 "memory usage" 0 "Exit" 2>$temp2
if [ $? -eq 1 ]
then
break
fi
selection=`cat $temp2`
case $selection in
1)
diskspace ;;
2)
whois ;;
3)
memusage ;;
0)
break ;;
*)
dialog --msgbox "Sorry, wrong selection" 10 30
esac
done
rm -f $temp 2> /dev/null
rm -f $temp2 2> /dev/null
|