Como suprimir mensagens de erro de tar na tubulação

6

Por exemplo: Eu extraio um arquivo tar.bz2 com tar -xvf em vez de tar -xjvf:

 tar -xvf file.tar.bz2
 tar: invalid tar magic

e se redirecionar stderr

 tar -xvf file.tar.bz2 2>/dev/null

funciona.

Agora, se eu usar um cachimbo

 tar -xvf file.tar.bz2 | grep "something" 2>/dev/null 
 tar: invalid tar magic

Aqui, se o primeiro comando falhar, não consigo suprimir o erro.

Existe uma maneira de suprimir desta forma

    
por Ramana Reddy 01.09.2015 / 11:02

2 respostas

7

Aqui estão algumas alternativas que envolvem o redirecionamento de STDERR de tar e grep :

  • Usar bash agrupamento de comandos {} :

    { tar -xvf file.tar.bz2 | grep "something" ;} 2>/dev/null
    
  • Usando um subshell () :

    ( tar -xvf file.tar.bz2 | grep "something" ) 2>/dev/null
    

Note que se você quiser redirecionar o STDERR de um único processo, é melhor usar a resposta do Oli .

Em uma nota diferente, se você quiser grep algo sobre o STDOUT e o STDERR de tar use:

tar -xvf file.tar.bz2 |& grep "something"

Isso também fará com que o STDERR de tar seja esgotado.

Isso é na verdade uma forma abreviada de:

tar -xvf file.tar.bz2 2>&1 | grep "something"
    
por heemayl 01.09.2015 / 11:46
6

O pipe forma uma cláusula separada no comando para que o redirecionamento em ...

tar -xvf file.tar.bz2 | grep "something" 2>/dev/null 

... está redirecionando o STDERR de grep , não tar .

Para corrigir, simplesmente reordene as coisas para que seu redirecionamento esteja com o comando tar :

tar -xvf file.tar.bz2 2>/dev/null | grep "something"
    
por Oli 01.09.2015 / 11:10