exec 2>>/tmp/history.log 1> >(tee -a /tmp/history.log >&1)
pode funcionar para você, mas não há garantia de que o pedido estará correto. Essa ordenação parece ser um problema bem conhecido, de acordo com aqui e aqui .
Esse comando redireciona o stderr para o arquivo de histórico com 2>>/tmp/history.log
, depois o stdout para o mesmo arquivo usando 1> >(tee -a /tmp/history.log
. Finalmente, ele direciona de volta para stdout: >&1
.
Há uma ressalva com esse método. Em alguns testes que fiz, existe a possibilidade de um erro na ordenação da saída.
Por exemplo, usei find /etc/ -name interfaces
como teste. A saída desse comando sozinha é:
$ find /etc/ -name interfaces
/etc/network/interfaces
find: '/etc/lvm/backup': Permission denied
find: '/etc/lvm/archive': Permission denied
find: '/etc/cups/ssl': Permission denied
/etc/cups/interfaces
find: '/etc/ssl/private': Permission denied
find: '/etc/polkit-1/localauthority': Permission denied
Quando executo find /etc/ -name interfaces 2>>output 1> >(tee -a output >&1)
em um script, o arquivo de saída contém isto:
+ find /etc/ -name interfaces
++ tee -a output
find: '/etc/lvm/backup'/etc/network/interfaces
: Permission denied
find: '/etc/lvm/archive': Permission denied
find: '/etc/cups/ssl': Permission denied
find: '/etc/ssl/private': Permission denied
/etc/cups/interfaces
find: '/etc/polkit-1/localauthority': Permission denied
Observe que esta parte do stderr foi dividida em duas linhas:
find: '/etc/lvm/backup': Permission denied
Isso não acontece em todos os casos, mas é algo em que você deve estar ciente. Além disso, como mencionado acima, a ordenação é inconsistente.