[JM:00107] Re: [POST:DP] GNU_findutils xargs.1

Back to archive index

長南洋一 cyoic****@maple*****
2011年 1月 15日 (土) 18:39:26 JST


長南です。

元木さんのメールより [JM:00105]
> 
> > まず、引用は省略しますが、「説明」の最初のパラグラフが、自分でも
> > いまいち気に入っていません。「xargs は、コマンドラインが
> > 長くなりすぎるときは、標準入力から受け取った引き数を分割して
> > 実行する」ということを、ここで言っておいた方がよいと思うのです。
> > そうでないと、「コマンドを一回以上実行する」という説明がちょっと
> > 唐突になりますし、「コマンドラインが長すぎてエラーになることがない」
> > というのが xargs の売り物の一つなんでしょうから。でも、そのために
> > くどい文章になってしまいました。もっとすっきりした案があったら、
> > お教えください。
> 
> これは難しいですね。
> 意訳に近いですが、こんな案を考えてみました。
> 長南さんが書かれているように、訳注があった方が
> ぐっと分かりやすくなると思いました。
> 
>   xargsは、空白や改行で区切られた一連の項目群を標準入力から読み込み
>   (空白はダブルクォート、シングルクォート、バックスラッシュによって
>   保護できる)、読み込んだ一連の項目群を引き数にして、指定した command を
>   実行する (デフォルトのコマンドは/bin/echoである)。
>   (コマンドライン長の上限を越える場合や、オプションによる特別な指定が
>   ある場合は、項目群を適宜分割して command を実行するため)、
>   指定した command が複数回実行される場合もある。

「command を実行する」で切って、「一回以上実行する」の部分は、
補足説明として独立させるのですね。なるほど、よい案だと思います。
ただ、カッコの中が長くて、本文が短いのは、美しくないというか、
読みにくいような気がします。

思い切ってカッコをはずして、訳注を堂々と本文に組み込んでしまい
ましょうか。

  xargsは、空白や改行で区切られた一連の項目を標準入力から読み込み
  (空白はダブルクォート、シングルクォート、バックスラッシュによって
  保護できる)、それを引き数にして、指定した command を実行する
  (デフォルトのコマンドは /bin/echoである)。このとき、command に
  対してユーザが指定した引き数 (上記書式の initial-arguments) が
  あれば、標準入力から読み込んだ一連の項目は、その後ろに追加して行く。
  形成されたコマンドラインがコマンドライン長の上限を越える
  場合や、オプションによる特別な指定がある場合は、入力を適宜
  分割して command を実行するので、指定した command が複数回
  実行されることもある。標準入力における空行は無視される。

「一連の項目群」となさったのは、読み込んだ項目を一個づつ command に
実行させるのではなく、まとめて command の引き数にするのが基本だ
ということを強調なさりたかったからでしょうが、ちょっと重複した
言い方ではないかと思います。それで、「一連の項目」にして、
「追加する」を「追加して行く」に変更してみました。幾分あいまいに
なったかもしれません。

あるいは、独立した「訳注」にする手もあると思います。

  xargsは、空白や改行で区切られた一連の項目を標準入力から読み込み
  (空白はダブルクォート、シングルクォート、バックスラッシュによって
  保護できる)、その項目群を引き数にして、指定した command を
  一回以上実行する (デフォルトのコマンドは /bin/echoである)。
  このとき、command に対してユーザが指定した引き数 (上記書式の
  initial-arguments) があれば、標準入力から読み込んだ項目群は、
  その後ろに追加して行く。標準入力における空行は無視される

  [訳注]: 「command を一回以上実行する」というのは、xargs は
           普通、標準入力から読み込んだ項目のすべてを command に
           引き渡して、 command を一回実行するのだが、
           そうしたやり方で作成したコマンドラインが、コマンド
           ライン長の上限を越えてしまう場合や、オプションによる
           特別な指定がある場合は、入力を適宜分割して、command を
           複数回実行するからである。

どちらがよいでしょうか。

> > ここではセクション名に引かれて、「返り値」と訳しましたが、
> > 「説明」セクションでは「終了ステータス」と訳していました。
> > find のマニュアルを含めて、統一した方がよさそうです。
> > 著者は exit status を使っていますから、セクション名だけ
> > 「返り値」を残して、原則「(終了) ステータス」にしましょうか。
> 
> コマンドの場合には、返り値というよりは、exit code とか exit status
> というのが普通ですね。セクション 1 はコマンドなので、章の名前も
> 「返り値」でなく「終了ステータス」でもいいかなと思い始めました。
> 
> 私は、セクション 2 (システムコール) や セクション 3 (ライブラリ関数)
> の manpage ばかり相手にして来たので、これまで気にならなかったようです。

こういう約束事はどこかに書いてあるのではないかと思って、あちこち
捜してみました。man 7 man-pages で見つけました。翻訳を始める前に
読んでおけばよかったと思います。元木さんがお訳しになったものだし、
引用する必要はないでしょうが、

  終了ステータス        [通常はセクション 1, 8 のみ]
  返り値                [通常はセクション 2, 3 のみ]

  終了ステータス (EXIT STATUS)
        プログラムの終了ステータスの値と、それらの値に対応する
        状況を列挙する。このセクションはセクション 1 と 8 の
        マニュアルページにだけ登場すべきである。

  返り値 (RETURN VALUE)
        セクション 2 と 3 のページの場合、このセクションにライブ
        ラリルーチンが呼び出し元に返す値のリストを記載する。
        それらの値が返された場合の状態に対する説明も書く。

Wikipedia の Man_page の項目には、こんなことが書いてありますけれど。

  Other sections may be present, but these are not well standardized
  across man pages. Common examples include: OPTIONS, EXIT STATUS,
  ENVIRONMENT, KNOWN BUGS, FILES, AUTHOR, REPORTING BUGS, HISTORY
  and COPYRIGHT.

取り合えず、セクション名は「終了ステータス」にしておきます。

> > -d オプションの説明でも program という言葉が使われています。
> > 
> >   .\"O (省略)  This can be used when the input consists of simply
> >   .\"O newline-separated items, although it is almost always better to design
> >   .\"O your program to use 
> >   .\"O .B \-\-null
> >   .\"O where this is possible. 
> > 
> > この場合、design your program と言っていますから、program は
> > xargs ではないでしょう。では、xargs の入力を生成するプログラム
> > なのか。だとすると、そのプログラムが --null を使うというのが
> > おかしくなります。--null は xargs のオプションなんですから。
> > そこで、わたくしは、your program を xargs を含むコマンドライン
> > (パイプラインというんでしたっけ) と考えて、次のように訳しました。
> 
> xargs への入力を生成するプログラムのことではないでしょうか。
> 
> xargs に対して、わざわざ -d delimiter のように特殊な区切り文字を
> 指定させるくらいなら、前段のプログラムの出力の区切り文字の方を工夫して、
> 受け側の xargs では --null オプションで対処できるようにした方が
> いいだろう、と著者は言いたいのだと解釈しました。
> 
> >   入力が、項目を区切るのが改行のみであるような単純な構成の場合なら、
> >   このオプションを利用してもよいが、ほとんどたいていの場合、
> >   なるべくなら、xargs --null を使うように、実行するプログラムを
> >   組み立てる方が望ましい。

「怪我の功名」みたいですが、だいたいわたしの訳でよかったのですね。
もう少し明晰にするなら、

  なるべくなら、xargs の --null を使うように、出力側のプログラムを
  設計する方が望ましい。

-- 
長南洋一




linuxjm-discuss メーリングリストの案内
Back to archive index