Questão Como faço para armazenar todas as saídas e erros do comando?


Olá!

Eu preciso capturar todos os comandos, stdout e stderr sem qualquer adição aos comandos.
Quer dizer, eu tenho que salvar / armazenar a saída destes:

  1. $ echo 'test'
  2. $ ls -l
  3. $ cat some_file

commands.file

  1. alex @ bender: / pwd $ echo 'test'
  2. alex @ bender: / pwd $ ls
  3. alex @ bender: / pwd $ cat some_file
  4. alex @ bender: / pwd $ fsdfsdfsd

stdout.file

  1. teste
  2. test.txt some_file
  3. algum conteúdo de arquivo

stderr.file

_4. fsdfsdfsd

Quanto à primeira parte da questão, encontrei o script, que usa uma armadilha e antes de avaliar o comando que armazena o comando para registrar. Mas e quanto ao armazenamento de saída? repita: isso deve ser resolvido sem quaisquer adições ao comando. Quero dizer, depois de executar o script, eu não preciso escrever, por exemplo, primeiro comando ls > log.file


3


origem




Respostas:


Talvez o screen ferramenta pode fazer o truque para você com a função de registro de tela. Simplesmente comece screen na linha de comando e com as chaves CTRL-a + H (primeira combinação de CTRL + a e, em seguida, um capital H com SHIFT + H, só para esclarecer) tudo será logado no arquivo screenlog.0. O diretório onde o logfile é encontrado depende de onde você iniciou a tela, i. e. Se você iniciou a tela em seu $ HOME, então o arquivo de log será encontrado lá.


1



Ótima solução! Você pode querer esclarecer que A é apenas a chave a, mas H refere-se a um capital H. Então a combinação efetivamente se torna CTRL-A e depois SHIFT-H. - Tim
obrigado noggerl, mas, pode ser que você saiba outra maneira de fazer isso, porque em algum momento eu preciso patch de saída na hora .. - Alex Bender
A única solução para isso que eu tenho em mente é começar um segundo screen. Naquilo screen você pode iniciar um script que corrige a saída do outro screen em tempo de execução (ou seja, em python, talvez um shellscript pudesse fazer). Talvez eu possa te ajudar um pouco mais quando você me disser o que está tentando fazer. @ Tim: obrigado pela sua dica, editei minha solução com suas sugestões. - noggerl


Isso pode ser feito com o módulo python pty: usando um pseudo-terminal para gravar todas as entradas e saídas de uma sessão de terminal.


1