標準エラー出力への出力
echo
コマンドの出力結果を、デフォルトの標準出力ではなく、標準エラー出力に出力するには、末尾で 1>&2
のようにリダイレクトします(>&2
という省略形でも OK)。
#!/bin/bash
echo "Hello World" 1>&2
このように出力先を制御したプログラムは、実行結果をリダイレクトしたり、パイプ接続した場合の振る舞いに影響してきます。
上記のプログラムの出力結果を out.txt
というファイルにリダイレクトすると、ターミナル上には BBB
という標準エラー出力のみが表示されます。
cat の場合
cat
コマンドによるヒアドキュメントでも、標準エラー出力に出力できます。
cat 1>&2 <<EOF
AAA AAA AAA
BBB BBB BBB
CCC CCC CCC
EOF
シェルスクリプトの Usage 出力などに便利です。
usage() {
cat 1>&2 <<EOF
Usage: $(basename $0) [OPTIONS]
Options:
-h Display this message
-d DIR Output directory (default: .)
-v Use verbose output
EOF
exit -1
}
その他の出力先制御
コマンドの出力をさまざまな形でリダイレクトすることで、本来の標準出力、標準エラー出力への出力を次のように振り分けることができます。
出力先の凡例 … STDOUT
: 標準出力、STDERR
: 標準エラー出力、FILE
: ファイル、─
: 出力されない
コマンド形式 | 標準出力 | 標準エラー出力 |
---|---|---|
command | STDOUT | STDERR |
command >&2 command 1>&2 | STDERR | STDERR |
command 2>&1 | STDOUT | STDOUT |
command > /dev/null | ─ | STDERR |
command > /dev/null 2>&1 | ─ | ─ |
command > file | FILE | STDERR |
command > file 2>&1 | FILE | FILE |
command 2>&1 > file | FILE | STDOUT |
読み解き方:
&1
… 現在、標準出力 (1) に割り当てられている出力先&2
… 現在、標準エラー出力 (2) に割り当てられている出力先1>&2
… 標準出力 (1) の出力先を&2
に切り替える2>&1
… 標準エラー出力 (2) の出力先を&1
に切り替える> file
… 標準出力 (1) の出力先を file に切り替える