標準出力・標準エラー出力へのリダイレクト

こんなプログラムを作って試した。

#include <stdio.h>

int main(int argc, char *argv[]) {
    printf("stdout\n");
    fprintf(stderr, "stderr\n");
    return 0;
}
$ ./a.out 
stdout
stderr
$ ./a.out > /dev/null 
stderr
$ ./a.out 1> /dev/null 
stderr
$ ./a.out 2> /dev/null 
stdout
$ ./a.out &> /dev/null 
$ ./a.out > /dev/null 2>&1

標準出力と標準エラー出力をまとめてリダイレクトする方法は、今まで

$ ./a.out > /dev/null 2>&1

を使っていたんだけど、以下でも可能なことを本日発見。

$ ./a.out &> /dev/null 

追記:
ただし、これは bash の機能なので、sh では使用できないため、従来の方式が良いかもしれない。

追記2:
C シェル系だと以下のようにまとめられるんだ。

$ ./a.out >& /dev/null 

bash と微妙に違ってて、混乱しそう。