![파일에 특정 문자열이 있을 때 명령을 반복하는 방법은 무엇입니까?](https://linux55.com/image/110524/%ED%8C%8C%EC%9D%BC%EC%97%90%20%ED%8A%B9%EC%A0%95%20%EB%AC%B8%EC%9E%90%EC%97%B4%EC%9D%B4%20%EC%9E%88%EC%9D%84%20%EB%95%8C%20%EB%AA%85%EB%A0%B9%EC%9D%84%20%EB%B0%98%EB%B3%B5%ED%95%98%EB%8A%94%20%EB%B0%A9%EB%B2%95%EC%9D%80%20%EB%AC%B4%EC%97%87%EC%9E%85%EB%8B%88%EA%B9%8C%3F.png)
출력에 오류를 나타내는 특정 문자열이 있으면 명령을 반복하고 싶습니다. 내가 하고 싶은 명령은 에서 반복하는 것입니다 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를 수신하게 될 수 있으므로 이를 사용하지 않았습니다 .)