쉘스크립트로 키입력이 없으면 다음으로 진행하는방법?
작성자 정보
- 임근식 작성
- 작성일
컨텐츠 정보
- 2,483 조회
- 0 추천
- 목록
본문
일반적으로 리눅스에서 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
----------------------------------------------------------------
관련자료
-
이전
-
다음