다음 두 개의 스크립트가 있는데 그 중 하나는 파일에 쓰는 것입니다.
#!/usr/bin/env bash
while true; do
sleep 1;
echo "$(uuidgen)" >> /tmp/cprev.stdout.log
done;
또 다른 방법은 마지막 10줄을 읽고 다음 10줄로 파일을 덮어쓰는 것입니다.
#!/usr/bin/env bash
while true; do
sleep 5;
inotifywait -e modify /tmp/cprev.stdout.log | tail /tmp/cprev.stdout.log > /tmp/cprev.stdout.log
done;
어떤 이유에서인지 tail 명령은 파일을 자릅니다. 내가 하고 싶은 것은 tail 명령이 파일에서 10줄을 모두 가져오는 것을 마쳤을 때만 파일에 쓰는 것입니다. 어떻게 해야 합니까?
실제로 일어난 일:
- 끝에서 파일 자르기
- 마지막에 0줄 읽기
하지만 내가 하고 싶은 것은:
- 마지막에 10줄 읽어보세요
- 꼬리 잘린 파일
- tail은 위에서 10줄을 씁니다.
어떻게 해야 하나요?
답변1
나는 이것이 효과가 있다고 생각합니다 :
#!/usr/bin/env bash
while true; do
sleep 5;
inotifywait -e modify /tmp/cprev.stdout.log | while read line; do
lines="$(tail /tmp/cprev.stdout.log)"
echo "$lines" > /tmp/cprev.stdout.log
done;
done;
하지만 가능하다면 좀 더 세련된 것을 찾고 있어요