2016-09-16 1 views
1

알람으로 작동하는 스크립트가 있다고 가정 해 보겠습니다. 말 당신은 5 분으로 설정하며 다음을 수행합니다실행하는 동안 쉘 스크립트가 일시 중지되도록하려면 어떻게해야합니까?

printf '%s\n' 'Alarm set for 5 minutes' 
sleep 300 && printf '%s\n' 'Alarm!' 
키를 누를 때까지

내가 지속적으로 일시 정지 키를 모니터링 할 수있는 방법을 구현할 수있는 방법, 기다립니다 "P"또는 "SPC"를 말할 스크립트의 정상 실행을 다시 시작 하시겠습니까? 사용자가 알람을 일시 중지 할 수있는 방법이 필요합니다.

편집 : 명확히하기 위해 다른 코드를 실행하는 동안 잠시 멈춤 키 을 계속 모니터링하고 싶습니다. 이것은 실행을 중지하여 stin에서 수신 대기하는 것과 반대입니다.

+1

가능한 복제 ([Enter 키를 누르거나 계속 10 초 정도 기다린] http://stackoverflow.com/questions/9483633/press-enter-or-wait-10처럼 할 수 -seconds-to-continue) –

+0

이것은 여기에 호출이나'read'가 없기 때문에이 질문과 중복되지 않습니다. –

답변

1

당신은 타이머를 중단하는 방법으로 신호를 전송 받아 들인다면이 쉽게 수행 할 수 있습니다 :이 구현은 실제로 sleep 프로세스를 중지하지 않는다는 것을, 그리고 그 과정이 더 일을하는 경우

#!/bin/sh 

printf '%s\n' 'Alarm set for 5 minutes. ^C to continue' 
sleep 300 & 
trap : INT 
if wait; then 
    echo Timer complete 
else 
    echo Timer aborted 
fi 

주 중요한 경우, 아마 그것을 종료하고 싶을 것이다. (함정에서 아무것도하지 말고 신호를 보내십시오.)

0

많은 쉘에는 stdin에서 읽을 수있는 read 내장 함수가 있습니다. 이를 사용하여 프로그램을 대화식으로 만들 수 있습니다.

그러나 이런 종류의 I/O 등을 수행해야한다면 쉘에서 실제 프로그래밍 언어로 전환해야한다고 생각합니다.

0

아래

// alarm running = true 
while true 
do 
    //running running is true resume or start alarm 
    /** pseudo code 
     if running == true 
      start or resume alarm 
     else 
      pause alarm 
     your alarm start or re 
    **/ 
    IFS= read -r -t 0.5 -n 1 -s holder && var="$holder" 
    if [ "$var" == "p" ] 
    then 
      #running = false 
     echo "You have pause your alarm " 
    elif [ "$var" == "R" ] 
    then 
     #running = true 
    echo "start your timer" 
    fi 
done 
관련 문제