Eu quero fazer um script de shell que copie as saídas anteriores do emulador de terminal GUI (por exemplo, últimas 20 linhas). A motivação é a seguinte:
Quando executo um procedimento que requer muito tempo (por exemplo, baixar um arquivo muito grande ou converter um arquivo de filme muito grande), às vezes me lembro de outro trabalho e tenho que sair da sala. Nesse caso, pressiono ctrl+z para interromper o procedimento. E eu digito
fg; echo $? >> log.txt; date >> log.txt; systemctl poweroff
então eu saio do quarto.
Desta forma funciona e não é ruim. Mas tem uma desvantagem que eu não consigo ler as saídas do procedimento. Posso saber apenas o status ($?). Então eu quero copiar as últimas 20 ou 40 linhas e salvá-las no arquivo de log.
Execute seu comando com
nohup
,screen
outmux
em primeiro lugar. Claro que isso não vai ajudar se você já iniciou seu processo.Se for esse o caso, você pode capturar a saída do seu comando usando
strace
:(substitua
<PID>
peloPID
do seu processo)Se
strace
não for possível anexar ao processo, talvez seja necessário executar comoroot
/ comsudo
ou alterar suas configurações de ptrace para0
(e estar ciente das implicações de segurança disso!):Você pode redirecionar essa saída para um arquivo então.
Existem outras opções, por exemplo
gdb
oureredirect
. Veja aqui ou aqui .