使いたいwhiptail
他のプログラムの出力に基づいてチェックボックスのリストを生成します。最初のプログラムでは、各出力行の最初の単語だけが必要なのでawk
。
Bashが配列をどのように処理するかを理解するには、私はtldpでこのリンクを使用しています。。配列のサイズを確認する方法を学びました。ここ。
これは期待どおりに機能しませんが、echo
出力をコピーしてwhiptail
前に ""を入力すると機能します。
このコードが正しく機能するように変更するにはどうすればよいですか?
例program.sh
:
#! /bin/bash
find ./ -printf "%f\n"
例mainscript.sh
:
#! /bin/bash
MYARRAY=($(./program.sh -l | awk '{print $1;}'))
MYPARAMS=" --checklist \"\" 15 40 5"
i=0
while [[ $i -lt ${#MYARRAY[@]} ]]
do
MYPARAMS+=" \"${MYARRAY[$i]}\" \" \" off"
i=$[$i+1]
done
whiptail $MYPARAMS
echo $MYPARAMS
exit
ベストアンサー1
これは非常に理想的なソリューションではありませんが、次のものを使用できますeval
。
eval whiptail $MYPARAMS
問題が参照にあると思われます。しかし、MYPARAMSを配列に設定すると、期待どおりに機能します。
#! /bin/bash
MYARRAY=($(./program.sh -l | awk '{print $1;}'))
MYPARAMS=( --checklist "" 15 40 5 )
i=0
while [[ $i -lt ${#MYARRAY[@]} ]]
do
MYPARAMS+=( "${MYARRAY[$i]}" " " off )
i=$[$i+1]
done
whiptail "${MYPARAMS[@]}"
echo "${MYPARAMS[@]}"
exit