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
.