ダイアログボックスとゲージ+ yesnoウィジェット

ダイアログボックスとゲージ+ yesnoウィジェット

例を組み合わせようとしています。はい、まったくそうではありません。入力を変更するウィジェット測定小さな部品。しかし、それは失敗しました。私のコードは次のとおりです

#!/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

おすすめ記事