Bash
關閉終端時終端日誌記錄未完成
這是我的最後一行
.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
。