リダイレクション
概要
リダイレクションはシェルの機能
アプリの実行者は、そのアプリがどのように標準入出力を使うか意識して、適切な入力元出力元を用意する義務があるのでそれを柔軟に調整できるようになっている
シャローコピー
2>&1
>&で出力ファイルディスクリプタの複製
ファイルディスクリプタ1が2にディープコピーされる
&> file
標準出力、エラー出力の両方をfileに出力する
[n]<&-、[n]>&-
ファイルディスクリプタを閉じる
[n]<> filename
ファイルディスクリプタを読み書き両方でオープンする
table:標準入出力
STDIN キーボード、ファイル <、0<
STDOUT 画面、ファイル >、1>
STDERR 画面、ファイル 2>
例
cat 0< /var/log/messages 1> /tmp/result.txt
ls /noexist 2> /tmp/err.txt
ls /noexist 1> /tmp/list.txt 2>&1
標準出力を/tmp/list.txtに繋げて、標準エラーを標準出力の出力先からコピーする
hiroki.icon今じゃ普通にわかるけど、シェル芸に慣れていない時はteeとかプロセス置換とか色々組み合わさっている中にリダイレクションのコピーも出てくると訳が分からなかったな。 ls -R > /dev/null
出力を破棄する
docker pull hiroki1117/whisper:1 & > /dev/null &
バックグランドで実行して出力を握り潰す
command > /dev/null 2>&1
標準出力、エラー出力どちらも破棄
command &> /dev/nullで等価
bash hoge.sh 3>&1 1>&2 2>&3
標準出力と標準エラー出力が入れ替える
bash -i >& /dev/tcp/localhost/8888 0>&1
参照