そもそも
- 標準出力:echoを含めたフツーのメッセージの出力 1番
- 標準エラー出力:エラーメッセージの出力 2番
- リダイレクト:いわゆる
>
本来ターミナル上に表示される出力を指定ファイルに繋ぎかえること
sample
以下のrun.sh
を用意する
#!/bin/bash echo 'hello' cd /nodir echo 'world'
何も指定せずに出力
端末上には標準出力と標準エラー出力の両方が表示される
user@ubuntu:~$ ./run.sh hello ./run.sh: line 4: cd: /nodir: No such file or directory world
標準出力のリダイレクト
端末上に表示されるのは標準エラー出力のみ、指定ファイル先には標準出力のみ
user@ubuntu:~$ ./run.sh > log ./run.sh: line 4: cd: /nodir: No such file or directory user@ubuntu:~$ cat log hello world
標準エラー出力のリダイレクト
さっきと逆。
user@ubuntu:~$ ./run.sh 2> log hello world user@ubuntu:~$ cat log ./run.sh: line 4: cd: /nodir: No such file or directory
標準出力と標準エラー出力のリダイレクト
標準出力をoutlog
へ、標準エラー出力をerrlog
に ターミナル上には何も表示されない
user@ubuntu:~$ ./run.sh > outlog 2> errlog user@ubuntu:~$ cat outlog hello world user@ubuntu:~$ cat errlog ./run.sh: line 4: cd: /nodir: No such file or directory
標準出力と標準エラー出力を同一ファイルへ出力したい場合
上と同じようにやってもうまくいかない
user@ubuntu:~$ ./run.sh > log 2> log user@ubuntu:~$ cat log ./run.world ne 4: cd: /nodir: No such file or directory
標準出力と標準エラー出力を同じファイルに出力するには2>&1
というのを利用する
user@ubuntu:~$ ./run.sh > log 2>&1 user@ubuntu:~$ cat log hello ./run.sh: line 4: cd: /nodir: No such file or directory world
略記法として&>
もしくは>&
がある(どっちでも可) こっちのほうが一般的
user@ubuntu:~$ ./run.sh &> log user@ubuntu:~$ cat log hello ./run.sh: line 4: cd: /nodir: No such file or directory world
「2>&1」の意味
2 の出力を 1 の出力とマージしたものにする←まちがい- 2 の出力先を 1 の出力先と同じに設定する