2016-10-04 5 views
0

bash 스크립트에서 실행할 실행 시간이 길고 진행 막대를 포함하는 출력이 파일로 리디렉션되는 다른 스크립트의 출력을 표시하고 싶습니다.루프에서 tail -f를 사용하는 방법

내가 시작한 프로세스가 아직 실행 중일 때 tail -f을 사용한다는 생각이 들었습니다.


더미 시도 :

#!/bin/bash 
./worker.sh & # will log in LOG file 
while [[ $(kill -0 $!) ]]; do # my implementation of ps does not support the -p option 
    tail -f LOG 
done 
... 

이것은 tail "중지"로 작동하지 않습니다.


나는 사용하여 해결 방법을 찾은 다음 그러나 나는 다른, 청소기 해결책이 확신 :

#!/bin/bash 
./worker && pkill tail & # I assumed that worker will always return 0 
tail -f LOG 
... 

그래서, 내 질문은 : 표시하는 가장 좋은 방법은 무엇입니까가 실행중인 프로세스의 출력이 완료 될 때까지 기다리지 않고 파일에 로깅합니까?

+0

루프에서'tail -f'를 실행하는 목적은 무엇입니까? '-f' 플래그를 사용할 때'tail' 명령은 파일이 업데이트 될 때 계속해서 표시됩니다. –

+0

실은 바보 같은 생각이었습니다. – Zermingore

답변

1

나는 을 사용하면 안되는 것을 제외하고는 올바른 방법이라고 생각합니다. 실제로 ./worker이 실패하면 tail 프로세스가 종료되지 않기 때문입니다. 내가 완벽하게 질문에 대답 무엇을 발견

#!/bin/bash 
./worker ; pkill tail & 
tail -f LOG 
+0

제안한대로 현재'(./worker; pkill tail) &'을 사용하고 있습니다. 불행하게도'--pid'가 더 잘 맞다고 믿기 때문에 대답을 받아 들일 수 없습니다. (작업자 실행 중에 다른 프로세스가'꼬리'를 사용하기 시작한다면 어떻게됩니까?) 도움을 주셔서 감사합니다 – Zermingore

1

: 대신 당신은 같이 ;으로 명령을 분리 할 수 ​​있습니다

--pid=PID 
    with -f, terminate after process ID, PID dies 

:

tail을 --pid 옵션이 있습니다 스크립트는 다음과 같습니다.

#!/bin/bash 
./worker.sh & # will log in LOG file 
tail -f --pid=$! LOG 

불행히도 tail (busybox 1.16.1) 구현은이 옵션을 지원하지 않으므로 해결 방법을 아직 열어두고 있습니다.

+0

어때요?) ./worker의 PID1을 얻습니다. 2) 백그라운드에서'tail -f'를 실행하고 PID2를 얻습니다. 3)'wait '을 사용하여 작업자가 마칠 때까지 기다린다. 4)'kill ' –

+0

@ this.lau_ 고맙습니다. 완벽하게 작동합니다. 답을 받아 들일 수 있도록 우리의 답과 당신의 의견을 합치시겠습니까? – Zermingore