2013-10-31 3 views
1

bash에서는 코딩하지 않았지만 급한 것이 필요합니다. 죄송합니다 이것이 규범이 아니지만 정말 도움을 얻고 싶습니다.stdout 메시지에 따라 bash 스크립트 경고음이 울림

표준 출력에 던져지는 메시지가 있습니다. 메시지 유형 (메시지가 "found"라는 단어가있는 문자열)에 따라 삐 소리를 내기 위해 bash 스크립트가 필요합니다.

지금까지 나는 이것을 생각해 냈습니다.

output=$(command 1) # getting stdout stream? 
    while [ true ]; do 
    if [ "$output" = "found" ]; then # if the stdout has the word "found" 
    echo $(echo -e '\a') # this makes the beep sound 
    fi 
    done 

는 어디서/단어를 가지고있는 문자열을 확인 grep 또는 awk 명령을 추가하는 방법 "발견"잘 모르겠어요과 if 상태에서 그에 대해 확인할 수 있도록 "발견"만 반환 워드.

감사합니다.

당신은 같은 간단한 할 수
+0

을 약간 더 짧고 휴대용'의 printf입니다 '\ a'''에코 $ (에코 -e 대신에'\ A ')'. 간단한'echo -e '\ a''도 사용할 수 있습니다. 첫 번째 반향을 포착하고 다시 반향 할 필요가 없습니다. – chepner

답변

10

: command의 출력이 "발견"텍스트가 포함 된 경우

command | grep -q 'found' && echo -e '\a' 

을의 echo 명령이 실행됩니다 다음 grep가 0 종료 상태로 반환, 그래서 것, 원인을 삐.

출력에 "found"가 포함되어 있지 않으면 grep은 상태 1로 종료되고 echo이되지 않습니다.

경고음을 울리는 데 필요한 사항에 따라 && 뒤에 오는 문자를 바꿉니다. 일반 구문은 같은 것입니다 : 종에 관한

command | grep -q "$SEARCH" && command_if_found || command_if_not_found 
+5

'grep -q' 또는'grep>/dev/null'을 추천합니다. –

+0

감사합니다. 이것은 훨씬 더 의미가 있습니다. 그래서 스크립트에 추가했지만 명령이 stdout에서 메시지를받지 못하는 것 같습니다. stdout 메시지를 얻는 적절한 방법이 무엇인지 알고 있습니까? 이것은 내가 가지고있는 #/bin/bash SEARCH = "found"while [true]; do $ (명령 | grep -q "$ SEARCH"&& echo -e '\ a') done – sylvian

+0

루프가 필요하지 않습니다. 구성 요소로 분해 해보십시오. 'command'의 출력을보고,'command | grep 'found'', 등등. 어쩌면'command>/dev/null'과 같은 것을 보아도 될 것입니다 - 아마도'command'가 stderr로 출력하고 있습니까? – cmbuckley