stdout para logar, stderr para logar e consolar

1

Estou tentando enviar toda a saída para um log, com o stderr também sendo exibido no console.

.. com as entradas de log em ordem e algum método para enviar comentários para o log + console (o mesmo que stderr).

exec &> log

Por exemplo, isso não funciona:

#!/bin/bash

exec 2> >(tee log) 2>&1 > build.log

echo "Yes 1"
ugh "No 1"
echo "Yes 2"
ugh "No 2"
echo "Message to user" 3>&1

Os exemplos que estou encontrando aqui e em outros lugares os colocam fora de ordem ou redirecionam ambos para o log e o console.

Nenhum dos exemplos envia todas as saídas para o log - com stderr e 'mensagens especiais' também exibidas na tela ...


Solução

Chris resolveu isso em sua resposta abaixo. Esta é a solução adaptada:

#!/bin/bash

exec 3> >(tee -a log)
exec 4>>log
exec >&4 2>&3

# Out: To log.
echo "I'm standard output."

# Error: To log and console.
ugh "command not found"

# Message: To log and console.
echo "Message to user." >&3

Isso grava o para o log / console como o comentário fornecido sugere.

    
por Pear 09.04.2015 / 03:26

2 respostas

1

Estou assumindo que isso deve ser feito em um script? Se assim for, isso deve fazer o que você quer, eu acho. stdout será enviado apenas para out.txt . stderr será enviado para o console e para err.txt

#!/bin/bash
exec 3> >(tee ./err.txt)
exec 4>./out.txt
exec >&4 2>&3

echo "I'm normal text!"    # only in out.txt
echo "I'm an error!" >&2   # in err.txt and on console

Edit: Estou perturbadoramente satisfeito comigo mesmo por este pequeno roteiro, e não sei bem por que.

Editar 2: Para escrever os dois fluxos no mesmo arquivo, basta usar o mesmo nome de arquivo nos dois locais. Em teoria, isso raramente causaria uma perda de ordenação entre stdout e stderr; na prática, é perto o suficiente. (Veja meu comentário divagante abaixo para mais.)

    
por 09.04.2015 / 04:48
0

Você pode trocar a stdout e o fluxo stderr. veja este exemplo:

ps aux 3>&1 1>&2 2>&3 | grep init

Confira este link para mais detalhes.

    
por 09.04.2015 / 04:22

Tags