エラーメッセージは不要、という場合は「2> /dev/null」で標準エラーメッセージを「/dev/null」へリダイレクトします(画面10)。「/dev/null」というのは「ヌルデバイス」という特別な場所で、ここへの出力は全て破棄され、どこにも出力されず、保存もされません。
findコマンドで見つかった結果が多い場合は、標準エラー出力を「/dev/null」にリダイレクトした後にパイプでmoreコマンドに渡すことで、結果を1画面ずつ表示することができます(画面11)。
※tcshの場合“標準エラー出力だけを「/dev/null」へリダイレクトする”といった指定が難しいので、いったん別ファイルで保存して参照するとよいでしょう。また、今回のfindコマンドに限れば「find / -name '*.log' |& grep -v "許可"」のようにして、grepコマンドでエラーメッセージを取り除くという方法もあります。「grep -v 文字列」は指定した文字列が含まれていない行を表示するという意味で、「文字列」部分にはエラーメッセージにだけ使われるフレーズを指定しましょう。さらに、moreを付けたいならば「find / -name '*.log' |& grep -v "許可" | more」とします。なお、この方法はbashでも使えます。
先ほどとは逆に、エラーメッセージだけをmoreコマンドで表示したい場合は、サブシェルを使い「(find / -name '*.log' > /dev/null) |& more」のようにします。これは、()の中でいったん標準出力の内容を/「dev/null」に捨てて、あらためて全ての出力をmoreに渡す、というようなことをしています(画面12)。
また、bashの場合は「find / -name '*.log' 2>&1 1>/dev/null | more」のようにすることもできます(画面13)。「2>&1」は2番つまり標準エラー出力を、1番つまり標準出力と同じ所へリダイレクトする、という意味です。
最後に、今回紹介したパイプとリダイレクト、標準出力と標準エラー出力を、以下の表1と表2にまとめました。意味や使い方が分からなくなった際には参考にしてください。
標準出力 | 標準エラー出力 | 両方 | |
---|---|---|---|
リダイレクト | > または 1> | 2> | &> |
リダイレクトへの追加 | >> または 1>> | 2>> | &>> |
(使い方) | command > file | command 2>file | command &> file |
パイプ | | | なし | |& |
(使い方) | command | command | (※1) | command |& command |
表1 パイプとリダイレクト(bash) ※1 標準エラー出力だけをパイプで別コマンドに渡したい場合はサブシェルを使い「( command > /dev/null ) | & command」のようにするか、「command 2>&1 1>/dev/null | command」のようにする(本文参照) |
標準出力 | 標準エラー出力 | 両方 | |
---|---|---|---|
リダイレクト | > | なし | >& |
リダイレクトへの追加 | >> | >>& | |
(使い方) | command > file | (※2) | command >& file |
パイプ | | | なし | |& |
(使い方) | command1 | command2 | (※3) | command1 |& command2 |
表2 パイプとリダイレクト(tcsh) ※2 標準出力と標準エラー出力を別々のファイルに保存したい場合はサブシェルを使い「(command > file1) >& file2」のようにする(本文参照) ※3 標準エラー出力をだけパイプで別コマンドに渡したい場合はサブシェルを使い「( command > /dev/null ) | & command」のようにする |
PC-9801N・PC-486DXからのDOSユーザー。1992年より生産管理のパッケージソフトウェアの開発およびサポート業務を担当。のち退社し、専業ライターとして活動を開始。著書に『図解でわかるLinux』『らぶらぶLinuxシリーズ』『はじめてでもわかるSQLとデータ設計』『シェルの基本テクニック』など。2011年より、地方自治体の在宅就業支援事業にてPC基礎およびMicrosoft Office関連の教材作成およびeラーニング指導を担当。
Copyright © ITmedia, Inc. All Rights Reserved.