o registro do terminal não é concluído quando eu fecho o terminal

0

Esta é a última linha no meu .bashrc (quebras de linha inseridas para legibilidade):

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

Existe um /home/USER/.bashrc-cp sem a última linha mencionada (mas é uma cópia exata do meu .bashrc ).

Esta solução de registro de terminal funciona muito bem. Existem apenas dois problemas:

Q1: Se eu sair do terminal gnome com Alt + F4 , então os logs não serão gzipados. Por quê? Como posso gzip-los nesse caso?

Q2: não quero usar o arquivo .bashrc-cp . Há alguma solução para isso?

    
por LanceBaynes 25.02.2012 / 05:51

1 resposta

3

Q1
Quando você ALT + F4 seu terminal, ele envia um SIGHUP para o shell. O shell, em seguida, sai e envia um SIGHUP para tudo que está sendo executado sob esse shell. Como o shell é encerrado, ele para de processar todos os comandos, portanto, tudo após a execução de script não é executado.

A maneira de fazer isso é alimentando diretamente o 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)

O que fazíamos aqui:
No bash, >(cmd) é uma sintaxe especial que executa cmd e substitui >(cmd) pelo caminho de um pipe nomeado conectado ao STDIN de cmd . O nohup é necessário para que, quando o shell for encerrado, o gzip não obtenha um SIGHUP e morra. Em vez disso, ele obterá EOF em seu STDIN para que ele libere seu buffer e saia.

Q2
Eu não tenho certeza do que é .bashrc-cp. Se você está tentando evitar um loop recursivo, você pode export STARTTIME (ou alguma outra variável) antes de lançar script e então verificar sua existência. Se existir, não inicie script .

    
por 25.02.2012 / 07:09