Bashシェルスクリプト/リダイレクト の変更点


*リダイレクション [#cf12a3d3]

[[dokuwiki.fl8.jp掲載済>http://dokuwiki.fl8.jp/doku.php/bash/06_bash_redirect]]
[[dokuwiki.fl8.jp掲載済>http://dokuwiki.fl8.jp/doku.php/bash/06_redirection]]

**書式 標準入出力のリダイレクション [#ge46c93e]
 > File   標準出力の内容をFileに書き込む
 >> File  標準出力の内容をFileに追加書きする。
 >m       ファイルディスプリタm番の内容を標準出力にコピーする。
          (標準出力の内容をファイルディスプリタm番に向ける)
 >&-      標準出力のファイルディスプリタを閉じる
 < File   標準入力をFileの内容とする。
 <&m      ファイルディスプリタm番の内容を標準入力にコピーする。
          (標準入力をファイルディスプリタm番からとする。)
 <&-      標準入力のファイルディスプリタを閉じる

**書式 ファイルディスプリタ番号を指定したリダイレクション [#id1b85d7]
 n> File   ファイルディスプリタn番の内容をFileに書き込む
 n>&m      ファイルディスプリタm番の内容をファイルディスプリタn番にコピーする
 n< File   Fileのデータをファイルディスプリタn番の入力とする
 n<&-      ファイルディスプリタn番を閉じる
***ファイルディスプリタ番号 [#p9bad4f3]
0(標準入力)と1(標準出力)は省略する事ができます。
|50|300|c
|0|標準入力|
|1|標準出力|
|2|標準エラー|

**例 [#y2d4fbbb]
■lsコマンドの結果をlistへ書き込む。
 $ ls > list
■既存のファイルに追加書き込み~
dateコマンドをlistへ書き込んだ後、追加でlsの結果を書き込む。
 $ date > list
 $ ls >> list
■1(標準出力)をlogに2(標準エラー)をerrlogに出力する。
 $ command > log 2> errlog

■エラー(2)を/var/log/rsync.logへ、標準出力(1)を/dev/nullへ
 * 6 * * * root /root/rsync.sh 2> /var/log/rsync.log 1> /dev/null

■1(標準出力)も2(標準エラー)も残さない。~
・2>&1は1(標準出力)を2(標準エラー)にコピーするという意味~
・/dev/nullは捨てるという意味。
 $ command >/dev/null 2>&1


&color(red){■NG例};~
・この場合1(標準出力)を2(標準エラー)にコピーした後、1(標準出力)を捨てる為、2(標準エラー)は残る事になり、1(標準出力)も2(標準エラー)も残る事になる。
 $ commnad 2>&1 >/dev/null