私は私の質問に対する答えを見つけるのに運があまりありませんでしたが、たぶん私はそれを正しく尋ねていないかもしれません。
次のような起動プロセスがあります。
nohup ping 127.0.0.1 > log.txt >2>&1 &
すべての標準出力をlog.txtに送信する非常に簡単なコマンドです。唯一の問題は、私が実行しているコマンドがn秒ごとにlog.txtにデータを送信することです。 log.txtファイルを追加してドライブをいっぱいにする危険があるのではなく、log.txtファイルに1行を出力したいと思います。
log.txtに1行だけ出力して上書きし続ける方法はありますか?
ベストアンサー1
以下は、ログファイルの最後の出力行だけを保持する迅速で汚い解決策です。
ping localhost |
while IFS= read -r line; do
printf '%s\n' "$line" > log.txt;
done
これで、読み取るためにファイルにアクセスしようとすると、さまざまな競合状態が発生する可能性があります。相互アクセスを防ぐためにファイルを「ロック」することが役に立つかもしれません。 stackoverflowでこの質問をロックする方法についての詳細な情報は良い開始かもしれません。複数のスクリプトでbash内のファイルへのアクセスを同期(ロック/ロック解除)する方法は?