我有这两个脚本,其中一个正在写入文件:
#!/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 截断文件
- 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;
但如果可能的话我正在寻找更时尚的东西