例を組み合わせようとしています。はい、まったくそうではありません。入力を変更するウィジェット測定小さな部品。しかし、それは失敗しました。私のコードは次のとおりです
#!/bin/bash
PCT=0;i=0
(
while [[ $PCT -le 100 ]]
do
cat <<EOF
XXX
$PCT
el % es ${PCT}
XXX
EOF
for i in 1 2 3 4 5
do
i=$((i+1))
dialog --yesno "Si o No?" 15 61
case $? in
0)
PCT=$(($PCT+20));;
1)
PCT=$PCT;;
255)
echo "ESC pressed.";;
esac
done
#
#PCT=$(($PCT+10))
sleep 1
done
) |
dialog --title "GAUGE" --gauge "Este es un ejemplo de gauge" 20 70 0
yesno
ユーザーがボタンを押すとダイアログを表示したいと思います。Yes
、20を追加しPCT
、それ以外の場合はPCT
その値を保持します。
解決策を教えてもらえますか?
答え1
パイプラインにウィジェットを配置する代わりに、yesno
スクリプトを少し変更できます。
- 次の一時ファイルを作成します。
MYPIPE=$(mktemp)
--stderr
ウィジェットにオプションを追加するyesno
(実際のデータを乱さないように)- 「スリープ1」を「echo sleep」に変更(後で処理)
- この一時ファイルにデータを書き込むようにループの終わりを変更し(「|」マークを使用してパイプされます)
- ループ後にデータセットを実行し、「スリープ」が見つかった場合はスリープし、それ以外の場合はechoしてパイプします。それ楽器ウィジェットに。
例は次のとおりです。
#!/bin/bash
MYPIPE=$(mktemp)
trap "rm -f $MYPIPE" EXIT ERR
PCT=0;i=0
while [[ $PCT -le 100 ]]
do
cat >>$MYPIPE <<EOF
XXX
$PCT
el % es ${PCT}
XXX
EOF
for i in 1 2 3 4 5
do
i=$((i+1))
dialog --stderr --yesno "$PCT: Si o No?" 15 61
case $? in
0)
PCT=$(($PCT+20));;
255)
echo "ESC pressed.";;
esac
done
echo sleep >>$MYPIPE
done
while :
do
read MYDATA
[ -z "$MYDATA" ] && break
[ "x$MYDATA" = "xsleep" ] && sleep 1
[ "x$MYDATA" != "xsleep" ] && echo "$MYDATA"
done <$MYPIPE | \
dialog --title "GAUGE" --gauge "Este es un ejemplo de gauge" 20 70 0