Bash

從連續執行的程序中限制標準輸出

  • August 18, 2013

我沒有太多運氣找到我的問題的答案,但也許我沒有正確地要求它。

我有一個啟動過程如下:

nohup ping 127.0.0.1 > log.txt >2>&1 &

非常簡單的命令,將所有標準輸出發送到 log.txt。唯一的問題是我正在執行的命令每隔 n 秒發送一次數據到 log.txt。我只想在我的 log.txt 文件中輸出一行,而不是附加它並冒著填滿驅動器的風險。

有沒有辦法只輸出一行到 log.txt 不斷被覆蓋?

這是一個快速而骯髒的解決方案,只在日誌文件中保留最後一行輸出:

ping localhost | 
 while IFS= read -r line; do 
   printf '%s\n' "$line" > log.txt; 
 done

請注意,您現在在嘗試訪問文件進行讀取時可能會遇到各種競爭條件。從相互訪問中“鎖定”文件可能會有所幫助。有關在 stackoverflow 上鎖定此問題的更多資訊可能是一個好的開始:如何從多個腳本同步(鎖定/解鎖)對 bash 中文件的訪問?

試試這個腳本,它對我有用:

% nohup ping 127.0.0.1 > log.txt >&1&

通過鍵入以下內容檢查程序是否正在執行:

% ps ax | grep ping

如果程序正在執行:

% tail -f log.txt

如果它繼續 ping,則您的腳本工作正常。

引用自:https://unix.stackexchange.com/questions/55624