예를 결합하려고합니다.예, 전혀 그렇지 않습니다.입력을 수정하는 위젯측정작은 부품. 그러나 그것은 실패했습니다. 내 코드는 다음과 같습니다
#!/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