.
#!/bin/bash
PID=`mktemp`
while true;
do
[ -e "$1" ] && IO=`stat -c %i "$1"`
[ -e "$1" ] && echo "restarting tail" && { tail -f "$1" 2> /dev/null & echo $! > $PID; }
# as long as the file exists and the inode number did not change
while [[ -e "$1" ]] && [[ $IO = `stat -c %i "$1"` ]]
do
sleep 0.5
done
[ ! -z $PID ] && kill `cat $PID` 2> /dev/null && echo > $PID
sleep 0.5
done 2> /dev/null
rm -rf $PID
이 스크립트를 완전히 종료하려면 트랩을 사용하는 것이 좋습니다. 이것은 당신에게 달려 있습니다.
기본적으로이 스크립트는 tail
명령을 죽이기 위해 inode 번호 (stat -c %i "$1"
사용)가 변경되었는지 확인하고 파일을 다시 만들 때 새 번호를 시작합니다.
참고 : 출력을 오염시킬 echo "restarting tail"
을 제거 할 수 있습니다. 그것은 테스트에만 유용했습니다. 또한 inode 번호를 확인한 후 tail 프로세스를 시작하기 전에 파일을 교체하면 문제가 발생할 수 있습니다.
시계를 사용할 수 없습니다. 불행히도 – gfunk