長南洋一
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 を使うように、出力側のプログラムを 設計する方が望ましい。 -- 長南洋一