스크립트가 실행되는 동안 bash 스크립트 출력을 변경하는 방법은 무엇입니까?

스크립트가 실행되는 동안 bash 스크립트 출력을 변경하는 방법은 무엇입니까?

0에서 99까지 계산하는 다음 루프가 있습니다.

    #!/bin/bash

for ((i=0;i<100;i++));
do
   echo $i
   sleep 1
done

루프 스크립트가 실행되는 동안 터미널 출력 결과를 변경하는 방법이 있습니까? 문자 k를 누르면 루프가 자동으로 현재 숫자에 10개의 숫자를 더 추가하므로 화면에 10이라고 표시되고 K를 누르면 루프가 자동으로 20으로 변경됩니다! 감사해요

답변1

의견에서 언급했듯이 다음을 사용할 수 있습니다.

read -t 1 -n 1 key

-t옵션을 제거할 수 있으므로 스크립트 sleep는 다음과 같을 수 있습니다.

#!/bin/bash

for ((i=0; i<100; i++)); do
    read -t 1 -n 1 key
    if [ "$key" = "k" ]; then
        i=$((i + 10))
    fi
    echo $i
done

하지만 내 생각에 좀 더 이식성이 좋은 것은 다음과 같습니다.

#!/bin/bash

if [ -t 0 ]; then stty -echo -icanon -icrnl time 0 min 0; fi

keystroke=''
i=0
while [ $i -lt 100 ]; do
    keystroke="$(dd bs=1 count=1 2>/dev/null)" # http://www.tldp.org/LDP/abs/html/
    if [ "$keystroke" = "k" ]; then
        i=$(( i + 10 ))
    elif [ "$keystroke" = "q" ]; then
        break
    fi
    i=$(( i + 1 ))
        echo $i
    sleep 1 
done

if [ -t 0 ]; then stty sane; fi

exit 0

관련 정보