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