Command-Line
如何在日誌文件中保留最後 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 行。
誰能解釋一下問題出在哪裡?
問題是您的 shell 在執行命令之前設置了命令管道。這不是“輸入和輸出”的問題,而是文件的內容在 tail 執行之前就已經消失了。它類似於:
- shell打開
>
輸出文件進行寫入,截斷它- 外殼設置為使文件描述符 1(用於標準輸出)用於該輸出
- 外殼執行
tail
.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)"
到同一個文件。