Fazendo desenvolvimento embarcado com microcontroladores, eu tenho usado a tela GNU como um terminal serial há um bom tempo e adoro como é simples:
screen /dev/ttyUSB1 38400
Estou surpreso que, até recentemente, não sabia que despejar o log de depuração em um arquivo seria extremamente útil. Eu usei stty
e cat
no passado, mas é um pouco entediante com adaptadores seriais USB, que estão em uso atualmente. Basicamente, você só precisa executar stty
para definir a taxa de transmissão após o dispositivo ter sido desconectado e reconectado, então você se esquece de executá-lo de vez em quando e não pode usá-lo com shells interativos de qualquer maneira.
Portanto, definir o buffer de rolagem de log para algum tamanho alto ou infinito e usar a pesquisa na tela pode ser uma solução, mas é um pouco mais limitante do que usar grep
e realmente ser capaz de preservar o arquivo para referência futura.
Então olhei na página de manual da tela e encontrei alguns comandos muito úteis:
hardcopy [-h] [<file>]
Grava a imagem atualmente exibida no arquivo de arquivo ou, se nenhum nome de arquivo for especificado, em hardcopy.n no diretório padrão, onde n é o número da janela atual. Isso anexa ou sobrescreve o arquivo se ele existir. Ver abaixo. Se a opção for especificada, despeja também o conteúdo do buffer de rolagem.-h
hardcopy_append [on|off]
Se definido como on
, a tela será anexada aos arquivos criados pelo comando , caso contrário, esses arquivos serão substituídos a cada vez. O padrão é .hardcopy.n
C-a h
off
hardcopydir <directory>
Define um diretório onde os arquivos impressos serão colocados. Se não estiver definido, as cópias impressas serão despejadas no diretório de trabalho atual da tela.
Eu poderia usar hardcopy
, mas gosto log
um pouco mais porque não preciso me lembrar de realmente executá-lo.
log [on|off]
Inicia / interrompe a gravação da saída da janela atual em um arquivo "screenlog.%n"
no diretório padrão da janela, onde é o número da janela atual. Este nome de arquivo pode ser alterado com o comando. Se nenhum parâmetro for fornecido, o estado de registro é alternado. O log da sessão é anexado ao conteúdo anterior do arquivo, se já existir. O conteúdo atual e o conteúdo do histórico de rolagem não são incluídos no log da sessão. O padrão é .%n
logfile
off
logfile <filename>
logfile flush <secs>
Define o nome que os arquivos de log receberão. O padrão é "screenlog.%n"
. A segunda forma altera o número de segundos que a tela aguardará antes de liberar o buffer do arquivo de log para o sistema de arquivos. O valor padrão é 10 segundos.
logtstamp [on|off]
logtstamp after <secs>
logtstamp string <format>
Este comando controla o mecanismo de registro de data e hora do arquivo de log da tela. Se os timestamps forem ativados on
, a tela adiciona uma string contendo a hora atual ao arquivo de log após dois minutos de inatividade. Quando a saída continua e mais de dois minutos se passaram, um segundo carimbo de data / hora é adicionado para documentar o reinício da saída. Você pode alterar esse tempo limite com a segunda forma do comando. A terceira forma é usada para personalizar a string de carimbo de data / hora ( "-- %n:%t -- time-stamp -- %M/%d/%y %c:%s --n"
por padrão).
deflog [on|off]
Igual ao comando log, exceto que a configuração padrão para novas janelas é alterada. A configuração inicial é off
.
Alguns dos meus colegas e amigos mudaram de screen
para tmux
, mas percebi que esse é um dos recursos que por tmux
acaso não tinha, da última vez que verifiquei.