次の2つのスクリプトがあり、そのうちの1つはファイルに書き込むことです。
#!/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行すべてを取得した後にのみファイルに書き込むことです。どうすればいいですか?
実際に起こったこと:
- 最後にファイルを切り取る
- 最後にゼロ行を読む
しかし、私がしたいことは:
- 最後に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;
しかし、可能であれば、より洗練されたものを探しています。