Bash 从命令输出中可切换nconf-like菜单

Bash 从命令输出中可切换nconf-like菜单,bash,menu,Bash,Menu,我正在尝试创建以下类型的nconf,如空间-可切换菜单: [*] 1st item [*] 2nd one [ ] 3rd one [*] 4th one 应根据脚本中命令的输出创建项目。您可能希望使用对话框(或whiptail;它们非常类似)和--checklist小部件 下面是一个示例命令: options=$( dialog 2>&1 1>/dev/tty \ --keep-tite \ --checklist "Dialog

我正在尝试创建以下类型的nconf,如
空间
-可切换菜单:

[*] 1st item
[*] 2nd one
[ ] 3rd one
[*] 4th one

应根据脚本中命令的输出创建项目。

您可能希望使用
对话框
(或
whiptail
;它们非常类似)和
--checklist
小部件

下面是一个示例命令:

options=$(
  dialog 2>&1 1>/dev/tty \
         --keep-tite \
         --checklist "Dialog title" 20 120 4 \
         tag1 "1st item" on \
         tag2 "2nd item" off \
         tag3 "3rd item" off \
         tag4 "4th item" on
)
最终结果是,
$options
将包含所选项目的标记值列表。把这个命令拆开:

对话框
使用stdout写入终端,然后将自己的输出(所选标记的列表)写入stderr。这对于编写脚本来说有点笨拙;
$(…)
构造将
stdout
重定向到
bash
可以读取的管道。因此,我们将管道
stdout
复制到
stderr
2>&1
),以便捕获最终输出,然后将
stdout
设置回终端(
2>/dev/tty

——保持该位置
是特定于对话框的;它使对话框使用“备用屏幕”,这实际上意味着一旦小部件完成,显示将恢复。如果不清楚的话,试一下有没有

         --keep-tite \
--checklist
之后的前四个参数是窗口的标题、高度和宽度以及菜单高度(通常与项目数相同)

其余参数分为三组:标记(不应包含空格或shell元字符),用于标识所选选项;要显示的实际文本;以及是否初始选择该选项的指示

         tag1 "1st item" on \
         tag2 "2nd item" off \
         tag3 "3rd item" off \
         tag4 "4th item" on
         --checklist "Dialog title" 20 120 4 \
         tag1 "1st item" on \
         tag2 "2nd item" off \
         tag3 "3rd item" off \
         tag4 "4th item" on