나에게 필요한 것은 키를 눌러 건너뛸 수 있는 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와 함께 작동합니다. 테스트를 따옴표로 묶는 것이 실제로 더 안전하므로 이를 추가했습니다.