--/--/-- (--)
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
2010/10/24 (日)
リダイレクトやパイプも元をたどればファイル記述子(ファイルディスクリプタ)を操作しているに過ぎない。

ファイル記述子Nは
0 標準入力
1 標準出力
2 標準エラー出力
3... その他開いたファイル等



リダイレクト

リダイレクトは原則として

% ファイル記述子 オペレータ ファイル

という書式である。



・ファイル記述子の順序の罠

(1) % command > file 2>&1
(2) % command 2>&1 > file

は効果が異なる。
標準出力と標準エラー出力をfileに保存したい場合、(2)を実行すれば良いと思いがちだが、これは誤りである。
(2)は、まず記述子2を記述子1に結びつけるが、この時点で記述子1は端末に結びついているので記述子2も端末に結びつく。
この後、> fileが処理され記述子1がfileに結びつくが、このとき記述子2は端末に結びついたままなのである。
なお、パイプは|でコマンドが区切られるので、良く見るmakeを見ながらログにとるときは
% make 2>&1 | tee make.log

というふうに先に2>&1を書かなければならない。
(ちなみにcshの場合 % make |& tee Make.log)
コメント
この記事へのコメント
コメントを投稿する
URL:
Comment:
Pass:
秘密: 管理者にだけ表示を許可する
 
トラックバック
この記事へのトラックバック
この記事のトラックバックURL
http://tochiii.blog119.fc2.com/tb.php/244-e487aada
この記事にトラックバックする(FC2ブログユーザー)
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。