tail -n 10は私のファイル全体を切り捨てます。

tail -n 10は私のファイル全体を切り捨てます。

次の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行すべてを取得した後にのみファイルに書き込むことです。どうすればいいですか?

実際に起こったこと:

  1. 最後にファイルを切り取る
  2. 最後にゼロ行を読む

しかし、私がしたいことは:

  1. 最後に10行を読む
  2. 尾切りファイル
  3. 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;

しかし、可能であれば、より洗練されたものを探しています。

おすすめ記事