FreeBSD QandA 630
Q. cshを使っています。
リダイレクトは % hogehoge >log
標準エラー出力もだと % hogehoge >&log
他のコマンドに渡すときは % hogehoge | hiyohiyo
もしくは、 % hogehoge |& hiyohiyo
ですが、これを/etc/daily.localに書くと怒られます。
シェルがshですので、同じ事をshの文法で書くとどういう風になるのでしょうか。
A. jman shを">"という文字で検索してみましょう。
パイプライン という部分で
パイプラインによる標準入出力の接続はリダイレクトに先立って
行われるため、パイプラインの接続をリダイレクトによって修正
することができます。たとえば、
% command1 2>&1 | command2
という例が載っています。
というわけで、shの場合は、以下のようにします。
リダイレクトは % hogehoge > log
標準エラー出力もだと % hogehoge > log 2>&1
他のコマンドに渡すときは % hogehoge | hiyohiyo
もしくは、 % hogehoge 2>&1 | hiyohiyo
リダイレクト('<'や'>')やパイプ('|')にはファイルディスクリプタを
指定することが出来ます。
ファイルディスクリプタは番号で表現しますが、約束ごとで、
0 標準入力
1 標準出力
2 標準エラー出力
となっています。">"が"1>"と同じ意味であり、"n>&m"が
「nをmに混ぜてしまう」ということが理解できれば、
% hogehoge > log 2>&1
の代わりに
% hogehoge 2> log 1>&2
とするといった応用もできるようになります。
間違い・追加情報を見付けた場合は、
修正案の投稿のしかた を読んだ上で、
QandA@jp.FreeBSD.org まで
お知らせください。