ログファイルの最後の50行を保持する方法

ログファイルの最後の50行を保持する方法

ファイルの最後の50行を維持し、毎分温度を保存してみました。私は次のコマンドを使用しました。

tail -n 50 /home/pi/Documents/test > /home/pi/Documents/test

しかし、結果は空のテストファイルです。私はそれがテストファイルの最後の50行をリストし、それをテストファイルに挿入すると想像しています。このコマンドを使用するとき:

tail -n 50 /home/pi/Documents/test > /home/pi/Documents/test2

うまくいきます。 test2ファイルには50行があります。

誰でも問題が何であるかを説明できますか?

ベストアンサー1

問題は、シェルがコマンドを実行する前にコマンドパイプラインを設定することです。 「入力と出力」の問題ではなく、tailが実行される前にファイルの内容が消えることです。次のように進みます。

  1. シェルは書き込み用>に出力ファイルを開き、それを切り捨てます。
  2. シェルは、この出力に対してファイル記述子 1 (標準出力用) を設定します。
  3. シェルの実行tail
  4. tail実行して開き、/home/pi/Documents/test何も探さないでください。

多くの解決策がありますが、鍵は問題を理解し、正確に何が間違っているのか、その理由は何であるかを理解することです。

それからあなたが探しているものが出てきます。

echo "$(tail -n 50 /home/pi/Documents/test)" > /home/pi/Documents/test

説明する:

  • $()コマンド置換と呼ばれる実行tail -n 50 /home/pi/Documents/test
  • 引用符は出力の改行を維持します。
  • > /home/pi/Documents/test出力をecho "$(tail -n 50 /home/pi/Documents/test)"同じファイルにリダイレクトします。

おすすめ記事