
출력에 오류를 나타내는 특정 문자열이 있으면 명령을 반복하고 싶습니다. 내가 하고 싶은 명령은 에서 반복하는 것입니다 gksu ./installer.run > ./inst.log 2>&1
. Bash 명령줄에서 이 작업을 어떻게 수행합니까?'string'
./inst.log
답변1
파일에서 문자열을 찾습니다.
grep -q string file
종료 값은 grep이 무엇인가를 찾았는지 여부를 알려줍니다.
그런 다음 명령이 실제 종료 값을 반환하는 한 반복할 수 있습니다.
while command ; do
repeat this
done
명령을 한 번 이상 실행하고 싶더라도
while true ; do
some command
if ! grep -q string file ; then
break # jump out of the loop if it's _not_ there
fi
done
그렇지 않으면 루프 앞과 내부에서 명령을 반복해야 합니다.
답변2
에서는 이라는 점에 유의하세요 while while-cmd-list; do do-cmd-list; done
.while-cmd-list
반품명령 목록. 단일 명령일 필요는 없습니다.
그래서 당신은 이것을 할 수 있습니다 :
while
gksu ./installer.run > ./inst.log 2>&1
grep -q string inst.log
do
echo >&2 "Trying again, output contained string"
done
여기서도 다음을 수행할 수 있습니다.
while
gksu ./installer.run 2>&1 |
tee ./inst.log |
grep string > /dev/null
do
echo >&2 "Trying again, output contained string"
done
-q
( 이렇게 하면 grep
조기 종료가 발생하여 설치 프로그램이 SIGPIPE를 수신하게 될 수 있으므로 이를 사용하지 않았습니다 .)