Redirecionando stdout e stderr ao instalar o software

0

Eu gostaria de poder simplesmente salvar stdout e stderr quando instala software

Existem 3 cenários que gostaria de abordar:

  1. Ao usar o apt-get
  2. Ao usar o apt-get e tee
  3. Ao usar o make install

1. Ao usar o apt-get

Estou tendo problemas para "visualizar" a diferença entre stdout e stderr no contexto da instalação do software. Na verdade, muitas vezes você obtém muitos resultados em seu terminal ao instalar o software, e alguns deles geralmente têm avisos. Então, neste contexto "

  • O stderr ficaria completamente vazio se sua instalação tivesse funcionado?
  • Ou se tiver aviso, o que é "deixado" no stdout?
  • Ou você sugeriria salvar stdout e stderr juntos nesse contexto?

De qualquer forma, isso funcionaria?

sudo apt-get package 1>output.txt 2>errors.err

2. Ao usar o apt-get e tee

Na prática, seria bom não apenas salvar o stdout e o sterr nos arquivos, mas também visualizá-los no meu terminal. Então, usando tee, este seria o melhor trabalho?

sudo apt-get package | tee 1>output.txt 2>errors.err

3. Ao usar o make install

As coisas ficam complicadas aqui, estou supondo .. Seria tão simples como:

./configure 1>output1.txt 2>errors1.err
make 1>output2.txt 2>errors2.err
make install 1>output3.txt 2>errors3.err
    
por m93 12.06.2018 / 17:13

1 resposta

0

Vou abordar cada um deles por sua vez:

$ sudo apt-get install package 1> apt.out 2> apt.err

Isso pode lhe causar alguns problemas se apt-get decidir fazer uma pergunta. O prompt será enviado para a saída padrão e redirecionado para o arquivo e não será exibido para você. Se você quiser usar o apt-get desta maneira, use suas outras opções para responder antecipadamente a qualquer pergunta ( apt-get --assume-yes install package 1> apt.out 2> apt.err ). Mas esteja ciente de que pressupor um "sim" pode levar a consequências imprevistas.

$ sudo apt-get install package | tee 1> apt.out 2> apt.err

Isso é um pouco melhor, mas primeiro vamos corrigir sua invocação de tee :

$ sudo apt-get package 2> apt.err | tee apt.out

Sua chamada inicial não chamou corretamente tee e, em seguida, redirecionou o erro padrão de tee em vez de apt-get para o seu log de erros.

Isso funcionará melhor, mas você não verá na sua tela nenhuma informação presumivelmente útil que tenha sido enviada para um erro padrão que possa aconselhá-lo sobre suas reações se apt-get lhe fizer qualquer pergunta.

$ ./configure 1>output1.txt 2>errors1.err
$ make 1>output2.txt 2>errors2.err
$ make install 1>output3.txt 2>errors3.err

Isso fará exatamente o que você espera; você terminará com seis arquivos com todo o erro padrão e saída padrão dos três comandos. Eu sugiro usar nomes de arquivos um pouco menos abstrusos, e. g .:

$ ./configure 1> configure.out 2> configure.err
$ make 1> make.out 2> make.err
$ make install 1> install.out 2> install.err

Mas eu estaria mais inclinado a colocá-los em dois arquivos:

$ ( ./configure && make && make install ) 1> build.out 2> build.err

Isso faz duas coisas de maneira diferente: primeiro, coloca todos os comandos de compilação em uma subcamada e coleta magicamente os fluxos de saída juntos. Em segundo lugar, ele usa o operador && do shell para somente executar o próximo comando se o comando anterior foi bem-sucedido.

Observação : eu também consertei sua invocação de apt-get em todo.

    
por 12.06.2018 / 17:50