我使用下面的代码向用户提供一个菜单,供他们选择要安装的软件。然后我想使用这些选择作为函数调用来执行安装。
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
对于某些小部件(构建列表,清单,树视图),一次一行输出结果,不带引号。这有利于其他程序的解析。