linux コマンド tee 画面とファイルの両方へ出力

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

コマンドを実行したとき、画面とファイルの両方に出力したいときがあります。しかし通常は、画面出力するとファイルには保存されないし、ファイルにリダイレクトすると画面には表示されません。画面は結果確認として、ファイルへは実行結果のログとして、画面とファイルの両方に出力したい、そんな使い方です。そんなときは、teeコマンドを使います。

スポンサーリンク



コマンドの使い方

基本的な使い方

あるコマンドを実行するとき、パイプ(|)でteeへ繋ぎます。teeコマンド名に続き、出力するファイル名を指定します。上書きしたくない場合は、別のファイルを指定するか、-aオプションを指定して追記するようにします。

  • lsの結果を画面とファイルに出力

    $ ls
    aaa.txt  bbb.txt
    
    $ ls | tee log.txt  #teeを使って画面にもファイルにも出力する
    aaa.txt
    bbb.txt
    log.txt
    
    $ cat log.txt  #logに保存されていることを確認
    aaa.txt
    bbb.txt
    log.txt
    

よく使うオプション

  • -a

    ファイル出力で指定したファイルに上書きしないで追記します。

こんなときはどうする?

  • コマンドでエラーが出力された場合もファイルに保存できるの?

    コマンドの出力には標準出力と標準エラー出力があります。teeコマンドを使った場合、ファイルに出力されるのは標準出力です。しかし、標準エラー出力と標準出力をファイルディスクリプタ1の出力にまとめることで、teeコマンドのファイル出力へ反映することができます。標準エラー出力と標準出力は、2>&1と指定することでまとめることができます。そして、teeコマンドへパイプで繋ぐと、これら両方を画面とファイルに出力することが出来ます。

    $ ls --t | tee log.txt  #エラーは画面出力されるが、ファイルには何も出力されない
    $ ls --t 2>&1 | tee log.txt  ## エラーも画面とファイルの両方に出力される。
    $ cat log.txt
    ls: オプション '--t' は曖昧です...
          

  • 自作のスクリプトの出力も画面とファイルの両方に保存できるの?

    自作のスクリプトの出力を、パイプを通してteeコマンドにつなげば、画面とファイルの両方に出力することができます。また、スクリプトで標準出力と標準エラー出力を使い分けた場合も、それらをまとめることで同様に出力することができます。

    hello.rb
    #! /usr/bin/ruby
    
    puts "hello! >1"         #標準出力
    STDERR.puts "hello! >2"  #標準エラー出力
          
    自作スクリプト(hello.rb)の出力を画面とファイルの両方へ出力
    $ ruby hello.rb  #画面出力のみで確認
    hello! >1
    hello! >2
    
    $ ruby hello.rb | tee log.txt  #画面とファイルへ出力
    $ cat log.txt  #ファイルへは標準出力だけ出力される
    hello! >1
    
    $ ruby hello.rb 2>&1 | tee log.txt  #標準出力と標準エラー出力をまとめる
    $ cat log.txt  #ファイルへは標準出力・標準エラー出力の両方が出力される
    hello! >1
    hello! >2
    

[amazonjs asin=”4797382384″ locale=”JP” title=”Linuxコマンドブック ビギナーズ 第4版 (コマンドブックシリーズ)”]

スポンサーリンク





ピックアップ記事

  1. tidyverse – distinct関数でデータフレームの重複行を削除 dplyrパッケージ

    tidyverseでデータフレームの重複行の削除を行う場合、dplyrパッケージのdistinct…
  2. R subset関数 データフレームやmatrixからの条件指定による行・列の抽出

    R の subset関数は、データフレームやマトリックスから条件にマッチした部分集合を取り出します…
  3. R 使い方 グラフの色 自作のカラーパレットとデフォルトのカラーパレット

    グラフを描画する際、色の組み合わせを1つ1つ考えるのは面倒ですよね。Rには、あらかじめ色の組み合わ…

人気記事

  1. IGV, 解析ツール

    IGV 使い方 インストール〜便利な使い方まで | リファレンス・マッピングデータ・アノテーションを読み込んで表示しよう
    IGV(Integrative Genomics View…
  2. Excel, その他, 統計

    z-score 計算方法 エクセル(Excel) 編
    統計処理で、大きく変化しているなどの判断基準にも使われる値…
  3. R データ型 - 文字列・ベクター・データフレーム・マトリックス など-, R言語, スクリプト

    R subset関数 データフレームやmatrixからの条件指定による行・列の抽出
    R の subset関数は、データフレームやマトリックスか…

おすすめ記事

  1. awk, bash 文字列操作, シェルスクリプト

    bash 部分文字列・置換・長さ・連結・分割の文字列処理
    bashのよく使う文字列処理、部分文字列・置換・連結・長さ…
  2. bash 応用, シェルスクリプト

    シェル スクリプト ファイル存在チェック・空のファイルチェック
    bashでスクリプトを作成するときに、よく使うのがファイル…
  3. R言語, グラフ

    R 使い方 軸・ラベルの調整(向き・サイズ・色など) グラフの描き方
    Rによるplot(グラフ)の描画は、手軽で大変便利です。た…