대화 상자 및 게이지 + 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(실제 데이터를 방해하지 않도록)
  • "sleep 1"을 "echo sleep"으로 변경(나중에 처리됨)
  • 이 임시 파일에 데이터(이제 "|" 표시를 사용하여 파이프됨)를 쓰도록 루프의 끝을 수정하고
  • 루프 후에 데이터세트를 실행하고, "sleep"이 발견되면 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

관련 정보