tar -xzf file 3>&1 1>&2 2>&3 | grep -oP '^app: \K.*$' | tee logfile
Não foi possível encontrar nada sobre isso, mas estou tentando registrar apenas uma parte específica do stderr em um arquivo. Então, por exemplo
Executando tar -xzf file 2>> log.txt
e recebendo um erro
tar: Child returned status 1
Eu só quero registrar a parte do status 1 retornado pelo filho e não incluir o nome do comando.
tar -xzf file 3>&1 1>&2 2>&3 | grep -oP '^app: \K.*$' | tee logfile
Com zsh
, você pode fazer:
tar -xzf file 2> >(sed 's/^tar: //' >> file.log)
Que permite reter o status de saída de tar
.
Você pode fazer algo semelhante com ksh
, bash
ou yash
, mas você teria que usar o trabalho lá para garantir que sed
tenha terminado a hora em que você executa o próximo comando se esse comando usar o file.log
.
Outra opção com bash
é usar:
{ tar -xzf file 2>&1 >&3 3>&- | sed 's/^tar: //' >> file.log 3>&-; } 3>&1
tar_exit_status=${PIPESTATUS[0]}
Note que com vários shells, você também pode chamar tar
com um vazio argv [0] com:
(exec -a '' tar -xzf file)
Nesse caso, as mensagens de erro serão semelhantes:
: Child returned status 1
Tags stderr