![当通过命令替换表达式启动时,为什么“dialog”不显示菜单(但接受接受)?](https://linux22.com/image/58894/%E5%BD%93%E9%80%9A%E8%BF%87%E5%91%BD%E4%BB%A4%E6%9B%BF%E6%8D%A2%E8%A1%A8%E8%BE%BE%E5%BC%8F%E5%90%AF%E5%8A%A8%E6%97%B6%EF%BC%8C%E4%B8%BA%E4%BB%80%E4%B9%88%E2%80%9Cdialog%E2%80%9D%E4%B8%8D%E6%98%BE%E7%A4%BA%E8%8F%9C%E5%8D%95%EF%BC%88%E4%BD%86%E6%8E%A5%E5%8F%97%E6%8E%A5%E5%8F%97%EF%BC%89%EF%BC%9F.png)
我想通过 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" \
)