以下のコードを使用して、ユーザーがインストールするソフトウェアを選択できるメニューを提供しています。その後、これらの選択を関数呼び出しとして使用してインストールを実行しようとします。
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行ずつ出力します。これは他のプログラムの解析を容易にします。