linux コマンド リダイレクト 出力を切り替える

バイオインフォ道場、くまぞうです。

コマンドの入出力をファイルなどに切り替えることをリダイレクトと言います。実行結果をファイルに出力したりして良く使う機能ですが、色々な活用方法を覚えて用途に応じて使い分けると、もっと便利になります。

スポンサーリンク






コマンドの使い方

基本的な使い方

標準出力をファイルへリダイレクトする・標準入力をファイルからにリダイレクトする・標準出力と標準エラーをまとめる、という用途で良く使います。

  • ファイルへの出力

    コマンドの実行結果をファイルへ出力します。

    ps | grep bash > log.txt

  • ps | grep bash >> log.txt  # 追記の場合

  • ファイルからの入力

    DOSファイルの改行コードを取り除いてファイルへ保存します。

    tr -d '\015'< dos_file.txt > unix_file.txt

  • コマンドの出力とエラー出力をファイルへ出力する

    コマンドの出力は、標準出力と標準エラー出力に分かれているので、ファイルへリダイレクトしただけでは標準エラー出力がファイルに書き込まれません。標準エラー出力を標準出力にまとめる必要があります。

    $ ls
    aaa.txt
    
    $ ls aaa.txt noexist.txt > log.txt 2>&1
    
    $ cat log.txt  # 標準出力とエラー出力が書き込まれている
    ls: 'noexist.txt' にアクセスできません: ...
    aaa.txt



こんなときはどうする?

  • コマンドの実行結果やエラーメッセージを全て表示したくない?

    シェルスクリプトの作成を行った場合、このような使い方が便利なときがあります。とにかく、処理に関するエラーの判定だけを行いたい場合などに、不要な画面出力を抑制することが出来ます。

    $ command > /dev/null 2>&1
    $ expr "$VAR1" + 1 > /dev/null 2>&1  # $?(実行終了ステータス)のみを利用

  • エラーメッセージだけを表示したい?

    エラーが発生したかどうかを確認したい場合、このような使い方があるかもしれません。

    $ command 2>&1 > /dev/null
    $ ls exist.txt noexist.txt 2>&1 > /dev/null
    ls: 'noexist.txt' にアクセスできません: ...  # エラー出力のみ

  • メッセージをエラー出力として表示したい?

    シェルスクリプトの作成を行った場合、独自のメッセージをエラーメッセージとして出力するときに便利です。

    $ echo "script error" > log.txt 1>&2
    script error  # エラー出力として表示(log.txtには出力されない)

  • 長いメッセージはヒアドキュメントを活用すると便利?

    ヒアドキュメントは長いメッセージの処理に適しています。パイプやファイル出力も組み合わせて使えるので便利です。EOF間のメッセージに対して、grep処理を行い、結果をファイルに出力しました。

    $ cat << EOF | grep ^a >file1 2>&1
    > aaa
    > bbb
    > ccc
    > EOF
    
    $ cat file1  # ヒアドキュメントをパイプで処理&書き込み結果
    aaa

  • サイズ0のファイルを作る?

    サイズ0のファイルを作るには、リダイレクトを使うと簡単です。

    $ >file                # size=0
    $ cat /dev/null > file # size=0

スポンサーリンク






コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です