Например: Я извлекаю файл 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
Здесь, если первая команда перестала работать, я не могу подавить ошибку.
Есть ли способ подавить таким образом
Вот несколько альтернатив, которые включают перенаправление 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"
Канал формирует отдельный пункт в команде так перенаправление в...
tar -xvf file.tar.bz2 | grep "something" 2>/dev/null
... перенаправляет STDERR от grep
, не tar
.
Для фиксации просто переупорядочьте вещи, таким образом, перенаправление с Вашим tar
команда:
tar -xvf file.tar.bz2 2>/dev/null | grep "something"