[Shell] 標準出力と標準エラー出力をファイルに出力する

※当サイトでは広告を掲載しています

調べればたくさんのサイトが検索結果に出てくると思うけど、とりあえず備忘録ということで、標準エラー出力をファイルに出力する方法。

標準エラー出力だけをファイルに出力させたい場合は、

$ test.sh 2> logfile.log

でよい。標準出力も出したい場合は、

$ touch logfile.log
$ test.sh 1>> logfile.log 2>> logfile.log

でよさそう。どちらが先に書き出されるかわからないので、前もってログファイルを作成しておいたほうがいいかも。


画面とファイルの両方に出力する場合は、標準出力も混ざるけど

$ test.sh 2>&1 | tee logfile.log

とすればよい。


じゃあ実際に動かしてみるとどうなるかというと…。

まず標準出力と標準エラー出力を出すためのプログラムを作って確認。

$ cat HelloWorld.java
import java.util.List;
public class HelloWorld {
  public static void main(String[] args) {
    System.out.println("Hello World");
    List<String> list = null;
    System.out.println(list.get(0));
  }
}

コンパイルして

$ javac HelloWorld.java

実行。

$ java HelloWorld 2> logfile.log
Hello World
$ cat logfile.log
Exception in thread "main" java.lang.NullPointerException
        at HelloWorld.main(HelloWorld.java:6)

tee を使って画面とファイル出力。

$ java HelloWorld 2>&1 | tee logfile.log
Hello World
Exception in thread "main" java.lang.NullPointerException
        at HelloWorld.main(HelloWorld.java:6)
$ cat logfile.log
Hello World
Exception in thread "main" java.lang.NullPointerException
        at HelloWorld.main(HelloWorld.java:6)

tee を使って標準エラーだけをファイル出力する方法は、ちょっと調べてみたけどかなり面倒そうなので省略。

コメント

タイトルとURLをコピーしました