Registrando apenas uma parte específica do stderr?

1

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.

    
por Hanson Duan 02.10.2017 / 06:57

2 respostas

0

tar -xzf file 3>&1 1>&2 2>&3 | grep -oP '^app: \K.*$' | tee logfile
    
por 02.10.2017 / 22:38
0

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
    
por 03.10.2017 / 00:22

Tags