Как подавить сообщения об ошибках tar в при передаче по каналу

Например: Я извлекаю файл tar bz2 с tar-xvf вместо tar-xjvf:

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

и если перенаправление stderr

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

работает.

Теперь, если я использую канал

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

Здесь, если первая команда перестала работать, я не могу подавить ошибку.

Есть ли способ подавить таким образом

6
задан 1 September 2015 в 02:02

2 ответа

Вот несколько альтернатив, которые включают перенаправление STDERR обоих tar и grep :

  • Использовать bash группировка команды {}:

    { tar -xvf file.tar.bz2 | grep "something" ;} 2>/dev/null
    
  • Используя подоболочку () :

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

Обратите внимание на это, если Вы хотите перенаправить STDERR единственного процесса лучше для использования ответа Oli вместо этого.

На другой ноте, если Вы хотите grep что-то и по STDOUT и по STDERR tar использование:

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

Это также вызовет STDERR tar быть исчерпанным.

Это - на самом деле сокращение от:

tar -xvf file.tar.bz2 2>&1 | grep "something"
8
ответ дан 23 November 2019 в 07:22

Канал формирует отдельный пункт в команде так перенаправление в...

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

... перенаправляет STDERR от grep, не tar.

Для фиксации просто переупорядочьте вещи, таким образом, перенаправление с Вашим tar команда:

tar -xvf file.tar.bz2 2>/dev/null | grep "something"
6
ответ дан 23 November 2019 в 07:22

Другие вопросы по тегам:

Похожие вопросы: