web-dev-qa-db-ja.com

パイピング時のtarエラーメッセージを抑制する方法

たとえば、tar -xjvfの代わりにtar -xvfを使用してtar.bz2ファイルを抽出します。

 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
Ramana Reddy

targrepの両方のSTDERRのリダイレクトを伴ういくつかの選択肢があります。

  • 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"

これにより、tarのSTDERRも使い尽くされます。

これは実際には次の短縮形です。

tar -xvf file.tar.bz2 2>&1 | grep "something"
7
heemayl

パイプはコマンド内で個別の句を形成するため、リダイレクトは...

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

... grepではなく、tarからSTDERRをリダイレクトしています。

修正するには、単にtarコマンドでリダイレクトが行われるように、順序を変更します。

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