ダイアログボックスでリスト選択を変数の別々の行に強制する方法

ダイアログボックスでリスト選択を変数の別々の行に強制する方法

以下のコードを使用して、ユーザーがインストールするソフトウェアを選択できるメニューを提供しています。その後、これらの選択を関数呼び出しとして使用してインストールを実行しようとします。

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

このコードは選択項目をキャプチャするのに有効です。私が経験している問題は、次のように最初の2行を選択した場合、選択を1行に書き込むことです。

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
一部のウィジェットの場合(ビルドリストチェックリストツリービュー)、結果を引用符なしで一度に1行ずつ出力します。これは他のプログラムの解析を容易にします。

関連情報