我想通过 bash shell 脚本向用户提供一个可供选择的菜单。然后应将选择存储在环境变量中以供以后进一步使用。
如果我从命令行运行:
dialog \
--backtitle "Make a choice" \
--menu "Take a pick" \
10 40 3 \
choice1 "First choice" \
choice2 "Second choice"
然后一切正常;我得到了我想要的菜单,choice1
或者choice2
打印回来给我。但是,如果我运行:
SELECTION=$( dialog \
--backtitle "Make a choice" \
--menu "Take a pick" \
10 40 3 \
choice1 "First choice" \
choice2 "Second choice" \
)
那么它就不再按照我想要的方式工作了。
- 没有显示菜单,但(据我所知)
dialog
当我按 Enter 时退出 - 当我按 Enter 退出非显示菜单时,选择的标签出现在终端上,而不是存储到 $SELECTION 中
我尝试添加2>&1
将 stderr 重定向到 stdout,以防它确实被打印到 stderr。唯一明显的影响是现在,没有什么从命令替换表达式返回或者打印到终端。
在我的系统上,dialog
是cdialog
1.1-20120215。手册dialog
页提到了--menu
这一点退出时,所选菜单项的标签将打印在对话框的输出上。这似乎应该与上面类似的东西一起工作,但它不适合我。
我想要显示的菜单,允许用户在可用选项之间进行选择,当用户接受时,所选选项的标签(例如choice2
)将存储在环境变量 $SELECTION 中。如果用户取消,应该有明确的指示(理想情况下,$SELECTION 将是未定义的或零长度字符串)。
我怎样才能做到这一点?我缺少哪一块拼图?
建议替代方案的解决方案dialog
也是可以接受的,只要它们提供了一个不错的菜单可供选择,并且理想情况下建议的软件不是太奇特(main
要求 Debian Stable 存储库中的可用性)。
答案1
尝试使用以下--stdout
选项:
$ SELECTION=$( dialog --stdout \
--backtitle "Make a choice" \
--menu "Take a pick" \
10 40 3 \
choice1 "First choice" \
choice2 "Second choice" \
)