当通过命令替换表达式启动时,为什么“对话框”不显示菜单(但接受接受)?

use*_*ser 3 bash dialog

我想通过 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 时退出
  • 当我按 Enter 退出未显示的菜单时,选择的标签出现在终端上,而不是存储到 $SELECTION

我尝试添加2>&1将 stderr 重定向到 stdout,以防它真的被打印到 stderr。唯一显着的影响是现在,无论是从命令替换表达式还是打印到终端,都不会返回任何内容。

在我的系统上,dialogcdialog1.1-20120215。该dialog手册页说,大约--menu在退出时选择的菜单项的标签将在对话框的输出打印。这似乎应该可以与上述类似的东西正常工作,但对我来说却不是。

我希望显示菜单,允许用户在可用选项之间进行选择,并且当用户接受时,choice2所选选项的标记(例如,)将存储在环境变量 $SELECTION 中。如果用户取消,应该有明确的指示(理想情况下, $SELECTION 将是未定义的或零长度的字符串)。

我怎样才能做到这一点?我错过了什么拼图?

建议替代方案的解决方案dialog也是可以接受的,只要它们提供一个不错的菜单可供选择,并且理想情况下建议的软件不是太奇特(Debian Stablemain存储库中的可用性是必需的)。