GNU 監視而不擦除先前的輸出

GNU 監視而不擦除先前的輸出

格努watch是檢查程式輸出的非常有用的工具:它執行程式並每 2 秒全螢幕顯示輸出。

有時,我不想刪除先前的輸出,而是希望逐行列印帶有時間戳記。為此,我使用 bash 腳本,例如:

while true; 
    do echo -n "`date`   "; 
    ssh ubuntu@server -o ConnectTimeout=1 "uptime" ; 
    sleep 1; 
done

有沒有watch-類似的工具,可以運行命令並在一行中顯示其帶有時間戳記的輸出,而無需刪除先前的輸出?

答案1

我想說你已經在簡單的循環中找到了它,但你可以從這裡做很多事情:

編寫一個函數來為您處理該問題

function uberwatch {
    # call: uberwatch <interval> <command>
    while true; do
        "${@:2}";
        sleep $1;
    done
}

你可以把它放在你的周圍的某個地方~/.bashrc

將輸出記錄到文件,但繼續查看watch

watch "command | tee -a watchlog.log"

您仍然只能看到最新的運行情況,但如果需要,您可以挖掘歷史日誌。

答案2

雖然真實;執行日期>> /vat/tmp/watch.log;睡眠600; ls -l 檔名 >> /var/tmp/watch.log;完畢

我喜歡上面 Artem 提到的 while 循環,但希望將資料儲存在文件中,以便我返回時可以對其進行分析,因此添加了對文件的重定向。就我而言,每 10 分鐘查看一次文件,並使用 ls -l 查看文件大小

-傑伊

答案3

我喜歡奧利的修改後的watch解決方案,但我喜歡即時查看日誌而不是稍後挖掘日誌的想法。

這是一個想法:

watch 'echo $(date && command 2>&1 | tail -n 1) >> watchlog.log && cat watchlog.log | tail'

解釋:

  • echodate避免和之間出現換行符command
  • >>附加到文件,與輸出相同| tee -a但不重複watch
  • 2>&1將 stderr 與 stdout 結合起來,以確保您看到所有內容,包括錯誤。
  • | tail -n 1將輸出限制為最後一行(包含輸出的行date),以便更清晰地進行即時查看。這可能是也可能不是您對日誌檔案內容的期望。

相關內容