2014-05-17 2 views
1

로 전환 얻을 나는 작동이 중지 된 후 30 분이 경과 스크립트 중퇴bash는 스크립트를 중퇴하고 "endex"

read -t 1800 -n1 -p ""$bldgrn" Do you want to update the mpd feed? [y/n/q/r] $(tput sgr0)" ynqr 

에서이 줄 스크립트가 있습니다. "endex"라는 함수로 어떻게 전환 할 수 있습니까?

그리고 "endex는"

function endex { 
    echo; 
    sleep 0; 
    clear; 
    exit 
} 
+1

read' 시간 제한 '경우의 리턴 코드입니다 이상 128 그래서'만약 (($> 128)?); 다음 endex; else ...; fi' 할 것이다. 자세한 정보는'help read'를 읽으십시오. –

+1

@gniourf_gniourf는 대답을 만들기 위해 계획을 세웠습니까? –

+0

@TomFenech 완료. –

답변

3

read하면 시간 제한되고, 그것의 반환 코드는 128보다 더 크다. 따라서

read -t 1800 -n 1 -p "${bldgrn}Do you want to update the mpd feed? [y/n/q/r]$(tput sgr0) " ynqr 
if (($?>128)); then 
    endex 
else 
    # no timeout here 
fi 

이됩니다.

help read에는 -t 옵션 설명에 해당 정보가 들어 있습니다.


은 읽기 문 뒤에 if (($?>128))를 제공해야합니다. 일부 중간 명령을해야하는 경우, read의 리턴 코드 저장 :

read -t 1800 -n 1 -p "blah blah" 
saved_read_ret_code=$? 
# Here you can do whatever you like 
# ... 
if ((saved_read_ret_code>128)); then 
    echo "timeout" 
else 
    echo 
    echo "no timeout" 
fi 
+0

작동하지 않습니다! 나는 여러분이 보여 주었던 것처럼 설정했고, 실행하고 떠났지만, 화면을 'endex'의 일부로 지우지 않았습니다. 그냥 'endex'가 같은 줄로 떨어지는 것입니다. 내가 할 수 있다면, 내 질문을 수정하여 'endex'를 볼 수있다. – boudiccas

+0

@boudiccas : 테스트로서'-t 2' (2 초 동안),'echo timeout' 'endex' 라인 바로 위의 한 라인에서 실행 여부를 확인하십시오. –

+0

done, * 실행되지 않음 – boudiccas