FreeBSD QandA 630

FreeBSD QandA

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 まで お知らせください。