如何强制 Dialog 将清单选择写入变量中的单独行

如何强制 Dialog 将清单选择写入变量中的单独行

我使用下面的代码向用户提供一个菜单,供他们选择要安装的软件。然后我想使用这些选择作为函数调用来执行安装。

OPTIONS=$(dialog --no-tags --clear --backtitle "Installer Options..." --title "Software Selection" \
    --checklist "Use SPACE to select/deselct options and OK when finished."  30 100 30 \
       install_software_a "Install software A" off \
       install_software_b "Install software B" off \
       install_software_c "Install software C" off 2>&1 > /dev/tty)
$OPTIONS

该代码非常适合捕获选择。我遇到的问题是它将选择写入一行,如果选择了前两个,如下所示:

install_software_a install_software_b

当调用 $OPTIONS 时,它仅安装第一个选定的软件。有没有办法可以格式化 OPTIONS 变量,将选择写在单独的行上,如下所示:

install_software_a
install_software_b

蒂亚!

约翰

答案1

如果您有awk支持多字符记录分隔符的版本(应该适用于 的最新实现awk),您可以使用以下调用来转置数据:

echo "$options" | awk -v RS="[ \n]" '1'

答案2

您可以使用选项将输出重定向到文件--stdout,然后使用cat文件:

dialog --stdout --no-tags --clear --backtitle "Installer Options..." --title "Software Selection" \
    --checklist "Use SPACE to select/deselct options and OK when finished."  30 100 30 \
       install_software_a "Install software A" off \
       install_software_b "Install software B" off \
       install_software_c "Install software C" off \
 > file

OPTIONS=$(cat file | tr -s ' ' '\n')

echo "${OPTIONS[@]}"

install_software_a
install_software_b

答案3

使用--separate-output对话框的选项(即,之前--checklist选项)。在里面手册页:

--separate-output
对于某些小部件(构建列表,清单,树视图),一次一行输出结果,不带引号。这有利于其他程序的解析。

相关内容