標準出力
もしリダイレクト先のファイルが存在していなければ、新しいファイルが作成されます。
# 上書きモード
$ date > file
# 追記モード
$ date >> file
また、”> ファイル名” は ”1> ファイル名” の省略形であるため、上記の例は以下のようにも書ける。
このように書かれていると、”標準出力の分がリダイレクトされている” ということがより分かりやすい(一般的には省略されている)。
# 上書きモード
$ date 1> file
# 追記モード
$ date 1>> file
標準エラー出力
標準出力"1" に対して、標準エラー出力"2" となっており、使い方は標準出力と同じである。
# 上書きモード
$ rm text 2> file
# 追記モード
$ rm text 2>> file
$ cat file
rm: cannot remove 'text': No such file or directory
rm: cannot remove 'text': No such file or directory
上記の例ではエラー出力を file に書き込みをしたが、不要なエラー出力を無視したい場合もある。
シェルスクリプトにおいて、エラーを非表示にするオプションがあるコマンドの方が少ない。
そのような場合、リダイレクト先にファイルではなく、/dev/null を指定するのが一般的。
追記モードで rm test 2>> /dev/null とも書けるが意味はない。
# エラー出力を捨てる
$ rm test 2> /dev/null
標準出力と標準エラー出力
標準出力と標準エラー出力を同時にファイルにリダイレクトする場合は、両方を同時に指定することが出来ないため、標準エラー出力"2"を標準出力"1"に入れて、全て標準出力としてリダイレクトするような書き方になる。
$ rm test > file 2>&1
# 省略しなければ、以下のようにも書ける
$ rm test 1> file 2>&1
set -C がセットされている場合
以下の記述のように、ファイルの上書きが禁止されるため、リダイレクトするとエラーになる。
$ help set
(中略)
-C If set, disallow existing regular files to be overwritten
by redirection of output.
ただし、”>| ファイル名” と書くことで、強制的に上書きすることが可能となる。
$ set -C
$ rm test > file
bash: file: cannot overwrite existing file
$ rm test >| file
ちなみに、set -C を解除したいときは、set +C と実行する。