대량 시간 초과 대안?

대량 시간 초과 대안?

나에게 필요한 것은 키를 눌러 건너뛸 수 있는 80초의 수면입니다. 남은 시간을 확인할 수 있다는 점이 장점이 될 것입니다.

답변1

더 간단한 방법은

read -t 80 -n 1 -s -p "Hit a key to continue"

하지만 남은 시간은 볼 수 없습니다. 남은 시간을 보려면 서브셸을 포함하는 더 복잡한 스크립트를 사용할 수 있습니다.

( for i in {80..0}; do
    echo Wait for $i seconds or press any key;
    sleep 1;
  done )&
read -t 80 -n 1 -s; kill $!

논란의 여지가 있지만 이 kill명령은 다소 안전하지 않습니다. 하지만 서브셸이 절전 모드에 실패하여 조기에 종료되어 무고한 프로세스가 해당 PID를 재사용하고 종료될 가능성은 거의 없습니다.

답변2

매우 간단한 스크립트는 다음과 같습니다.

#!/bin/bash

IFS=_
count=80
echo "hit a key:"
while [ $count -ge 1 ]
do
    echo -e -n "\rtime remaining: $count"
    read -n 1 -s -t 1 myresponse
    if [ "$myresponse" ]
    then
        echo -e -n "\nyou entered: $myresponse\n"
        break
    fi
    ((count--))
done
if [ $count -eq 0 ]
then
    echo -e -n "\nyou did not entered anything\n"
fi

편집하다: IFS필드 구분 기호를 밑줄로 변경하는 줄을 추가했습니다. 이제 스크립트는 공백, 탭 및 Enter와 함께 작동합니다. 테스트를 따옴표로 묶는 것이 실제로 더 안전하므로 이를 추가했습니다.

관련 정보