1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

シェルスクリプト 標準出力と標準エラー出力のリダイレクト

Last updated at Posted at 2019-12-29

標準出力

もしリダイレクト先のファイルが存在していなければ、新しいファイルが作成されます。

standard1
# 上書きモード
$ date > file
# 追記モード
$ date >> file

また、”> ファイル名” は ”1> ファイル名” の省略形であるため、上記の例は以下のようにも書ける。
このように書かれていると、”標準出力の分がリダイレクトされている” ということがより分かりやすい(一般的には省略されている)。

standard2
# 上書きモード
$ date 1> file
# 追記モード
$ date 1>> file

標準エラー出力

標準出力"1" に対して、標準エラー出力"2" となっており、使い方は標準出力と同じである。

standard-error1
# 上書きモード
$ 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 とも書けるが意味はない。

standard-error2
# エラー出力を捨てる
$ rm test 2> /dev/null

標準出力と標準エラー出力

標準出力と標準エラー出力を同時にファイルにリダイレクトする場合は、両方を同時に指定することが出来ないため、標準エラー出力"2"を標準出力"1"に入れて、全て標準出力としてリダイレクトするような書き方になる。

standard3
$ 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.

ただし、”>| ファイル名” と書くことで、強制的に上書きすることが可能となる。

standard4
$ set -C
$ rm test > file 
bash: file: cannot overwrite existing file
$ rm test >| file 

ちなみに、set -C を解除したいときは、set +C と実行する。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?