Bash

關閉終端時終端日誌記錄未完成

  • February 25, 2012

這是我的最後一行.bashrc(為便於閱讀而插入換行符):

STARTTIME=`date +%F-%Hh-%Mm-%Ss-%N`; \
script -q -t 2> /home/USER/logs/$STARTTIME-timing.txt \
      -c 'bash --rcfile /home/USER/.bashrc-cp' \
      -f /home/USER/logs/$STARTTIME-log.txt; \
gzip -9 /home/USER/logs/$STARTTIME-timing.txt /home/USER/logs/$STARTTIME-log.txt; \
exit 0

有一個/home/USER/.bashrc-cp沒有提到的最後一行(但它是 my 的精確副本.bashrc)。

這個終端日誌記錄解決方案效果很好。只有兩個問題:

Q1:Alt如果我用+退出 gnome-terminal,F4那麼日誌不會被壓縮。為什麼?在這種情況下,我該如何壓縮它們?

**Q2:**我不想使用.bashrc-cp文件。有什麼解決方案嗎?

Q1

當您 ALT+F4 終端時,它會向 shell 發送一個 SIGHUP。然後 shell 退出並向在該 shell 下執行的所有內容髮送 SIGHUP。因為shell退出,它停止處理所有命令,所以執行後的一切都沒有script執行。

這樣做的方法是直接輸入 gzip。

STARTTIME=`date +%F-%Hh-%Mm-%Ss-%N`
script -q -t -c 'bash --rcfile /home/USER/.bashrc-cp' \
-f >(nohup gzip -9 > /home/USER/logs/$STARTTIME-log.txt.gz) \
2> >(nohup gzip -9 > /home/USER/logs/$STARTTIME-timing.txt.gz)

這裡做了什麼:

在 bash 中,>(cmd)是一種特殊的語法,它執行cmd並替換>(cmd)為連接到cmd’s STDIN 的命名管道的路徑。這nohup是必需的,以便當 shell 退出時,gzip 不會收到 SIGHUP 並死掉。相反,它將在其 STDIN 上獲得 EOF,以便它可以刷新其緩衝區然後退出。

Q2

我不確定 .bashrc-cp 是什麼。如果您試圖避免遞歸循環,您可以export STARTTIME(或其他一些變數)在啟動之前script檢查它是否存在。如果存在,請不要啟動script

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