질문&답변
클라우드/리눅스에 관한 질문과 답변을 주고 받는 곳입니다.
리눅스 분류

쉘스크립트로 키입력이 없으면 다음으로 진행하는방법?

작성자 정보

  • 임근식 작성
  • 작성일

컨텐츠 정보

본문

 

일반적으로 리눅스에서 C프로그래밍시에 입력에 대한 Timeout처리를
하고자 할경우에 Signal Alarm 을 통하여 처리합니다.
----------------------------------------------------
#include <signal.h>
#include <stdio.h>


void alarm_cb (int signum)
{
 /*fprintf (stderr, "ALARM ");*/
 exit(1);
}

int main (int argc, char * argv)
{
 char inbuf[1024];

 signal (SIGALRM, alarm_cb);
 alarm(30);
 fgets(inbuf, sizeof(inbuf), stdin);
 puts(inbuf);
 return 0;
}
---------------------------------------------------

bash shell을 이용하여 이와 같은 Timeout 처리를 하고자 한다면
read의 -t 옵션을 사용하시면 됩니다.


* read's option
read [-ers] [-a aname] [-d delim] [-n nchars] [-p prompt] [-t timeout] [-u fd] [name ...]

 
---Ex1)read's timeout--------------------------------------------

#!/bin/bash

echo -n "Enter your name and press with timeout 5sec [ENTER]: "
read -t 5 var_name
echo "Your name is: ( $var_name )"
----------------------------------------------------------------

 

---EX2)read's timeout--------------------------------------------
#> vi test.sh
#!/bin/bash
read_timeout() {
trap : ALRM
trap 'kill "$pid" 2> /dev/null' EXIT
(sleep "$1" && kill -ALRM "$$") & pid=$!
read "$2"
ret=$?
kill "$pid" 2> /dev/null
trap - EXIT
return "$ret"
}
read_timeout 20 var
printf 'Got: "%s" as $var ' "$var

#> chmod 755 ./test.sh
#> ./test.sh
+ trap : ALRM
+ trap kill "$pid" 2> /dev/null EXIT
+ pid=901152
+ read var
+ sleep 2
+ kill -ALRM 647398
----------------------------------------------------------------

 

 

관련자료

댓글 0
등록된 댓글이 없습니다.

공지사항


뉴스광장


  • 현재 회원수 :  60,371 명
  • 현재 강좌수 :  37,041 개
  • 현재 접속자 :  296 명