这是我的最后一行.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
没有提到的最后一行(但它是我的精确副本.bashrc
)。
这个终端日志记录解决方案效果很好。只有两个问题:
问题一:Alt如果我使用+退出 gnome 终端F4,则日志不会被压缩。为什么?在这种情况下我该如何压缩它们?
问题2:我不想使用.bashrc-cp
文件。有什么解决办法吗?
答案1
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
并替换为连接到STDIN 的>(cmd)
命名管道的路径。cmd
这nohup
是必要的,这样当 shell 退出时,gzip 就不会收到 SIGHUP 信号而死掉。相反,它将在其 STDIN 上获取 EOF,以便可以刷新其缓冲区,然后退出。
Q2
我不确定 .bashrc-cp 是什么。如果您想避免递归循环,您可以export STARTTIME
在启动之前(或其他变量)script
检查它是否存在。如果存在,请勿启动script
。