Bash shell脚本,使用(CLI GUI)对话框提示用户输入

时间:2011-02-13 13:04:53

标签: bash input prompt

嗨,首先感谢所有提供有用答案/指针的人!

我正在写一个Bash脚本,有时可能需要询问用户输入。我正在寻找一个工具来提供运行级别3(没有X Windows)的输入框(想想GUI弹出消息框),它提供了一个选择列表和手动输入选项。它应该在每个选项旁边提供一个单选按钮。

例如,如果它要求用户输入名称,它将显示一个像这样的列表


(*)Johnny

()本

()希拉里。

()<manual input>


<manual input>行是一个允许用户输入自由文本的文本框。 输出应该是标准输出,并且应该是例如名称。 “希拉里”。

总之,要求是:

1)它应该弹出并成为一种明亮的颜色以吸引用户的注意力。平面文字不适合

2)最好允许使用光标或鼠标进行选择

3)提供单选按钮选择列表

4)也允许自由文本输入

5)将选择写入标准输出

6)我不想擦除屏幕上已有的状态/日志消息

Bash的读取命令不够“华而不实”,它不会引起用户的注意。

工具dialog在重新绘制整个屏幕时擦除屏幕上已有的文本,并且不允许在一个屏幕中同时显示选择列表和自由文本输入框。

再次感谢

MC

2 个答案:

答案 0 :(得分:2)

如上所述,对话框命令可以使用

使用--keep-tite创建一个对话框,以便在输入后保持屏幕并使用--checklist使其具有无线电选择框。 将所有答案放入一个数组中,并使用while循环回显每个数组项。

$ {#arrayName [@]} - &gt;数组中的项目数或选择数 $ {arrayName [@]} - &gt;输出所有数组项

- (UIView*) tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section {
    return nil;
}

- (CGFloat) tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section {
    return 0.0;
}

答案 1 :(得分:0)

我可以想到3种方法。 YMMV

  • 使用Zenity(由于您没有X,可能会被取消资格)。
  • 使用dialog - 至于屏幕上的东西消失,构建脚本以完全使用对话框,甚至在窗口小部件中显示信息文本。它还有一个--stdout选项,用于将输出定向到标准输出,以便它保持不变。 Whiptail是一个对话框替代品,我相信它更轻。
  • 使用tput并手动移动光标,绘制颜色等,使对话框脱颖而出。这很乏味且容易出错。

我不喜欢鲜艳的色彩和特别是正常选择的东西。我更喜欢柔和的read。但是,如果你想这样做,我会推荐第二种方法。您的应用程序应该使用widget工具包或不使用它。不要试图让它做到这两点。这不值得麻烦。