長南洋一
cyoic****@maple*****
2011年 9月 14日 (水) 08:07:42 JST
長南です。 基本的に増補・改訂部分だけですが、「パラメータ」セクションの 前までざっとチェックしました。これで約十分の一。いつになったら、 終わりまでたどり着けることか。チェックより翻訳する方がずっと 大変なのは、わかっていますけれど。 すでにお読みかもしれませんが、man(7) と man-pages(7) に目を通して おくとよいと思います。前者は、man で使う roff の約束ごとについて、 後者は man ページの決まりごとについて簡単に解説しています。 気が付いたことをどんどん書きますので、わたしの方が間違っている ところや、どうでもよいところもあると思います。ご遠慮なく反論して ください。 それから、重点的に見た方がよいところがあったら、先におっしゃって ください。たとえば、訳し方に迷っているとか、事実関係がイマイチ よくわからないとか。 それでは、始めます。 > .\"O .B Bash > .\"O can be configured to be POSIX-conformant by default. > .B Bash > はデフォルトで POSIX 適合に設定することもできます。 こういう conformant は、普通「準拠」と言うのではありませんか。 すぐ上でも a conformant implementation を「準拠する実装」と 訳していますし。もちろん、「設定によって、POSIX の規格 (仕様) に 合った (沿った) 動作にすることもできます」といったほかの訳し方も 可能ですけれど。 前訳では、基本的に文頭でも bash のような英単語を小文字で始めています。 その結果、新訳では、英単語が文頭に来た場合、語頭が大文字になったり 小文字になったりしています。 > .BI \-c "\| string\^" > .\"O If the > .B \-c > .\"O option is present, then commands are read from > .\"O .IR string . > オプションが指定されると、コマンドが > .IR string > から読み込まれます。 前訳では .IR string ではなく、 .I string になっています。 マクロ .IR は man 7 man によれば、「(後に続く引き数を) イタリック (下線) とローマンを交互に (して、表示する)」ということです (つまり、原文なら、string をイタリックに、ピリオドをローマンにする)。 一方、マクロ .I の方は、後に続く引き数を全部イタリックにするです。 ですから、前訳の .I string の方が正しい表記なのですが、この場合 どちらでも表示に変わりがなさそうなので、.IR string のままでも 構わないと思います。こういった場所はほかにもたくさんありましたが、 ここだけに書いておきます。 > .\"O If \fIshopt_option\fP is not supplied, the names and values of the shell > .\"O options accepted by \fBshopt\fP are printed on the standard output. > .\"O If the invocation option is \fB+O\fP, the output is displayed in a format > .\"O that may be reused as input. > \fIshopt_option\fP を指定しない場合、 > \fBshopt\fP で指定できるオプションの名前と値が標準出力に表示されます。 > このとき、入力として再利用できる形で出力されます。 If the invocation option is \fB+O\fP の訳が抜けています。 ここは、引き数なしの bash -O と bash +O の違いを説明しているんでしょう。 それから、何故原文が used ではなく、reused を使っているのか、わたしには わかりません。少なくとも、日本語では「再利用」ではなく、「利用」だけで よいような気がしますが、どうなんでしょうか。 > .B \-\-debugger > .\"O Arrange for the debugger profile to be executed before the shell > .\"O starts. > シェルの実行を開始する前に、デバッグモードを準備します。 要約のしすぎのような気もします。もっとも、debugger profile の 説明がこのマニュアルにはないようですから、こう訳すよりなかった のかもしれませんが。 > .\"O If > .\"O .B bash > .\"O is invoked in this fashion, > .\"O .B $0 > .\"O is set to the name of the file, and the positional parameters > .\"O are set to the remaining arguments. > このように > .B bash > が起動された場合、 「このように」がちょっと舌足らずな気がします。「このようにして」 「このような形で」「こうしたやり方で」など、いろいろ考えられる ところです。 > .\"O .B Bash > .\"O attempts to determine when it is being run with its standard input > .\"O connected to a network connection, as when executed by the remote shell > .\"O daemon, usually \fIrshd\fP, or the secure shell daemon \fIsshd\fP. > .B bash > は、自分を起動したのがリモートシェルデーモン (通常はリモートシェルデーモン > \fIrshd\fP またはセキュアシェルデーモン \fIsshd\fP) かどうかを調べます。 現行訳を引き継いでいますが、端折りすぎではないでしょうか。determine when it is being run with its standard input connected to a network connection と具体的なことを言っていますから、省略すべきではないと 思います。 > .\"O .B word > .\"O A sequence of characters considered as a single unit by the shell. > .\"O Also known as a > .\"O .BR token . > .B 単語 (word) > シェルが 1 単位とみなす文字並び。 > .BR トークン(token) > とも言われます。 「文字並び」という言葉は、日本語として無理なのでは? まあ、何を言っているかわかりますけれど。 > .\"O .B control operator >.\"O A \fItoken\fP that performs a control function. It is one of the following > .\"O symbols: > .B 制御演算子 (control operator) > 制御機能を持つ \fIトークン\fP。 > 以下の文字のうちのいずれかです: ほかの定義の項目を見ても、文字 (character) という言葉は、一文字の 意味で使われています。制御演算子には、|| や && のような二字のものも ありますから、ここでは「文字」よりも、現行訳どおり「シンボル」を 使った方がよいと思います。「シンボル」という言葉の出現が唐突で あることは、わかりますけれど、原文もほかの言い方が思いつかなかった のではないでしょうか。 > .\"O A \fIsimple command\fP is a sequence of optional variable assignments > .\"O followed by \fBblank\fP-separated words and redirections, and > .\"O terminated by a \fIcontrol operator\fP. The first word > .\"O specifies the command to be executed, and is passed as argument zero. > .\"O The remaining words are passed as arguments to the invoked command. > 単純なコマンド (\fIsimple command\fP) とは、 > 変数の代入を並べたもの (これは省略可能です) の後に、 > ブランク区切りの単語とリダイレクションを記述し、 > 最後に制御演算子を置いたものです。 > 最初の単語は実行するコマンドを指定します。 > 残りの単語は起動されるコマンドに引き数として渡されます。 and is passed as argument zero の訳が抜けています。 > .\"O A \fIpipeline\fP is a sequence of one or more commands separated by > .\"O one of the control operators > .\"O .B | > .\"O or \fB|&\fP. > \fIパイプライン (pipeline)\fPは、記号 > .B | > または \fB|&\fP で区切った 1 つ以上のコマンド列です。 a sequence of one or more commands と「1 つ以上のコマンド列」は 別物だと思います。「コマンド列」という言い方が無理なのかもしれません。 > .\"O The return status of a pipeline is the exit status of the last > .\"O command, unless the \fBpipefail\fP option is enabled. > .\"O If \fBpipefail\fP is enabled, the pipeline's return status is the > .\"O value of the last (rightmost) command to exit with a non-zero status, > .\"O or zero if all commands exit successfully. > \fBpipefail\fP オプションが有効になっている場合を除き、 > パイプラインの返却ステータスは最後のコマンドの終了ステータスになります。 > \fBpipefail\fP が有効になっている場合には、 > パイプラインの返却ステータスは 0 以外のステータスを返した最後の > (一番右の) コマンドの値になり、 > 全てのコマンドが正常終了した場合には 0 になります。 翻訳の最後の四行の論理が、わかりにくいと思います。 > .\"O If the reserved word > .\"O .B ! > .\"O precedes a pipeline, the exit status of that pipeline is the logical > .\"O negation of the exit status as described above. > .\"O The shell waits for all commands in the pipeline to > .\"O terminate before returning a value. > パイプラインの前に、予約語である > .B ! > がある場合、 > そのパイプラインの終了ステータスは上記の終了ステータスの > NOT を取ったものになります。 > 値を返す前に、シェルはパイプライン中の全てのコマンドが終了するのを待ちます。 別に、この訳に反対なわけではありません。ただ、原文は logical negation と言っているので、「論理」という言葉を出した方がよいのではないかとも 思うのです。要するに、頭に ! を付けると、パイプライン本体の 終了ステータスが 0 以外ならば 0、0 ならば 1 になるということを、 原文は「論理」という言葉で読者に伝えたいわけでしょう。 現行訳の「最後のコマンドの終了ステータスの論理値の NOT を取ったもの」 というかなりくどい訳も、そのへんの苦心なのではないでしょうか。 「論理 NOT」という言い方はしないものなのですか。だったら、「上記の 終了ステータスを論理否定したもの」などはどうでしょう。やっぱり、 「NOT を取ったもの」の方がわかりやすいですか。それなら、このままで よいと思います。 > .\"O When the shell is in \fIposix mode\fP, it does not recognize > .\"O \fBtime\fP as a reserved word if the next token begins with a `-'. > シェルが \fIposix モードのときには、 > 後に続くトークンが `-' であれば \fBtime\fP を予約語と認識しません。 \fIposix は 後ろの \fP が欠けています。そのため、下線が「認識しません」 まで伸びてしまっています。「\fIposix\fP モード」か「\fIposix モード\fP」 にすること。 「後に続くトークンが `-' であれば」は、「後に続くトークンが `-' で 始まるものであれば」か「後に続くのが `-' で始まるトークンであれば」 でしょう。ところで、この一節はどういう意味なんでしょうか。 POSIX モードで time -p find . -mtime 0 | grep 'txt' とでもすると、 ビルトインコマンドの time ではなく、/usr/bin/time が使われるとでも いうことなんでしょうか。 > .\"O When the shell is in \fIposix mode\fP, \fBtime\fP > .\"O may be followed by a newline. In this case, the shell displays the > .\"O total user and system time consumed by the shell and its children. > シェルが \fIposix モードのときには、\fBtime\fP の直後が改行でもかまいません。 > この場合、シェルと子プロセスが消費したユーザ時間とシステム時間を出力します。 ここでも \fIposix の後ろ (あるいは、「モード」の後ろ) に \fP が ありません。 # \fIposix\fP といった表記法については、info groff の「Escape Index」の # 「* \f: Changing Fonts」に説明があります。 total が訳から抜けています。もっとも、なくても大体わかりますけれど。 このパラグラフも、何を言っているのかわたしにはわかりません。 time[改行] と打ち込んだら、POSIX モードであろうとなかろうと、 real 0m0.000s user 0m0.000s sys 0m0.000s と出力されるだけではないのでしょうか。 > .\"O The > .\"O .B TIMEFORMAT > .\"O variable may be used to specify the format of > .\"O the time information. > このときにも、経過時間情報のフォーマット指定に変数 > .SM > .B TIMEFORMAT > が使われます。 「使われます」だと、ただの受身になってしまいます。「使えます」の方が よいのではないでしょうか。 > \fIリスト (list)\fP とは、1つ以上のパイプラインを演算子 > .BR ; , > .BR & , > .BR && , > .BR || , > のいずれかで区切って並べ、最後に 翻訳だけ引用しましたが、この「.BR || ,」の最後のコンマも要らないと 思います。 > .\"O A sequence of one or more newlines may appear in a \fIlist\fP instead > .\"O of a semicolon to delimit commands. > \fIリスト\fP 中では、コマンドの区切りとして、 > セミコロンの代わりに一つ以上の改行の並びが使われることもあります。 「一つ以上の改行の並び」は、意味はわかりますが、日本語らしくない 気がします。「一つ以上の連続する改行が」とか、「一つ以上の改行が 続けて」などの方が自然ではないでしょうか。 とは言え、ここも意味がよくわかりません。for i in *; do echo $i; done の代わりに、 $ for i in * > do > echo $i > done と打ち込むこともできますが、それを言っているのでしょうか。 > { \fIlist\fP; } > .\"O \fIlist\fP is simply executed in the current shell environment. > .\"O \fIlist\fP must be terminated with a newline or semicolon. > .\"O This is known as a \fIgroup command\fP. > .\"O The return status is the exit status of > .\"O \fIlist\fP. > .\"O Note that unlike the metacharacters \fB(\fP and \fB)\fP, \fB{\fP and > .\"O \fB}\fP are \fIreserved words\fP and must occur where a reserved > .\"O word is permitted to be recognized. Since they do not cause a word > .\"O break, they must be separated from \fIlist\fP by whitespace or another > .\"O shell metacharacter. > \fIlist\fP が単に現在のシェル環境で実行されます。 > \fIlist\fP の最後は改行文字かセミコロンでなければなりません。これは > \fIグループコマンド(group command)\fP と呼ばれます。返却ステータスは > \fIlist\fP の終了ステータスです。 > > メタキャラクターである \fB(\fP と \fB)\fP と違い、 \fB{\fP と \fB}\fP は \fI予約 > 語\fP であり、予約語として認識される場所に現われる必要があることに注意してください。 > これらは単語分割の対象とならないため、 > \fIリスト\fP との間が空白またはシェルのメタ文字で分かれている必要があります。 原文の一パラグラフを二つに分けたのは、よいことだと思います。 「メタキャラクター」は「定義」では「メタ文字」でした。 「( と ) と違い」は「( や )」の方が自然だと思います。「{ と }」は 「と」でも「や」でもよさそうです。もっとも、「と」と「や」では ニュアンスがちょっと違いますけれど。 「と」を使うのであれば、「( と ) の組 (あるいは、対) とは違い」とか、 「( と ) はメタ文字だが」とするところでしょう。 > .\"O Conditional operators such as \fB\-f\fP must be unquoted to be recognized > .\"O as primaries. > \fB\-f\fP などの条件演算子は最初に認識されるため、クォートしてはいけません。 as primaries の primaries は、すぐ上にある「式は後述の条件式で説明する、 プライマリによって構成されます」の「プライマリ」だと思います。 訳例をあげると、「-f などの条件演算子がプライマリとして認識される ためには、クォートされていてはいけません」。 > シェルオプション > .B nocasematch > .\"O .B nocasematch > .\"O is enabled, the match is performed without regard to the case > .\"O of alphabetic characters. > .\"O The return value is 0 if the string matches (\fB==\fP) or does not match > .\"O (\fB!=\fP) the pattern, and 1 otherwise. > .\"O Any part of the pattern may be quoted to force it to be matched as a > .\"O string. > が有効であれば、 > アルファベットの大文字と小文字を考慮せずにマッチングが行われます。 > 返り値は、文字列がマッチしたとき (\fB==\fP) またはマッチしなかったとき > (\fB!=\fP) に 0 となり、そうでない場合に 1 となります。 > パターン中のどの部分でも文字としてマッチングさせるにはクォートします。 「文字列がマッチしたとき (==) またはマッチしなかったとき(!=) に 0 となり」 というのは、わかりにくいと思います。 返り値は、文字列がマッチしたとき (== の場合)、あるいはマッチしなかった とき (!= の場合)、0 になり、そうでない場合は 1 になります とするか、 返り値は、== 演算子では文字列がマッチしたとき、!= 演算子では文字列が マッチしなかったとき、0 になり ... とした方が、わかりやすいのではないでしょうか。 「パターン中のどの部分でも文字としてマッチングさせるにはクォートします」 は string だから「文字列」ですが、言っていることがわかりません。 仮にパターンの中に * ? [ ] といったメタ文字が含まれていても、クォート すれば、普通の文字からなる文字列として扱われるということでしょうか。 だとしたら、「パターンの任意の部分をクォートして、文字列としてマッチ させることもできます」という、現行訳も悪くないと思います。ただし、 「文字列」を「ただの文字列」とした方がよいと思いますが。 うーん、string は「文字列」ですが、上のように考えると、「文字」と 訳す手もたしかにありますね。根本的に、原文が言葉足らずなんだと 思います。 > .\"O Any part of the pattern may be quoted to force it to be matched as a > .\"O string. > .\"O Substrings matched by parenthesized subexpressions within the regular > .\"O expression are saved in the array variable > パターン中のどの部分でも文字としてマッチングさせるにはクォートします。 二項演算子 =~ の説明中に、もう一度、出てきました。 > .\"O If any expression is omitted, it behaves as if it evaluates to 1. > .\"O The return value is the exit status of the last command in \fIlist\fP > .\"O that is executed, or false if any of the expressions is invalid. > どの算術式も省略された場合は、 > 評価結果が 1 とみなされた場合のように振舞います。 > 返却ステータスは \fIlist\fP 中で実行された > 最後のコマンドの終了ステータスとなりますが、 > 算術式のいずれかが無効である場合には不正な値となります。 「どの算術式も省略された場合は」だと、「すべての算術式が省略された場合」 とも、読めてしまいます。「どの算術式も、省略された場合は」と点を 打つか、「どの算術式であれ省略された場合は」とするか。ほかの訳し方も ありますけれど。 「評価結果が 1 とみなされた場合のように振舞う」は、「評価結果が 1 になった場合のように振舞います」か「評価結果を 1 とみなして、 そのように振舞います」か。 返却ステータスが「不正な値」というのは、どういうことなのでしょうか。 次の部分は case 文の説明にあります。 > .\"O Each \fIpattern\fP examined is expanded using tilde > .\"O expansion, parameter and variable expansion, arithmetic substitution, > .\"O command substitution, and process substitution. > それぞれの \fpattern\fP は、チルダ展開、パラメータと変数の展開、 > 算術式展開、コマンド置換、プロセス置換、クォート除去のうえで比較されます。 \fpattern\fP は \fIpattern\fP です。I が必要。 > パターン中のどの部分でも文字としてマッチングさせるにはクォートします。 この訳文に相当する英文が case 文の説明には存在しないようです。 if の説明中の > .\"O \fBthen\fP \fIlist\fP is executed. Otherwise, each \fBelif\fP > .\"O \fIlist\fP is executed in turn, and if its exit status is zero, > .\"O the corresponding \fBthen\fP \fIlist\fP is executed and the > .\"O command completes. Otherwise, the \fBelse\fP \fIlist\fP is > そうでなければ \fBelif\fP \fIlist\fP がそれぞれ順番に実行され、 > この終了ステータスが 0 ならば、対応する \fBthen\fP \fIlist\fP > が実行され、コマンドが終了します。 「この終了ステータス」は「その終了ステータス」でなければ、おかしいと 思うのですが、細かすぎるでしょうか。 > .\"O The \fBwhile\fP command continuously executes the list > .\"O \fIlist-2\fP as long as the last command in the list \fIlist-1\fP returns > .\"O an exit status of zero. The \fBuntil\fP command is identical > .\"O to the \fBwhile\fP command, except that the test is negated; > .\"O .I list-2 > .\"O is executed as long as the last command in > .\"O .I list-1 > .\"O returns a non-zero exit status. > \fBwhile\fP コマンドは、\fIlist-1\fP 中の最後のコマンドが終了ステータス > 0 を返すまで、繰り返して \fBdo\fP \fIlist-2\fP を実行します。\fBuntil\fP > コマンドは \fBwhile\fP コマンドとほぼ同じですが、 > 評価の条件が否定となる点が異なります。 > .I list-2 > は > .I list-1 > 中の最後のコマンドが > 0 以外の終了ステータスを返す限りずっと実行されます。 as long as the last command ... returns an exit status of zero ですから、「ゼロを返すまで」ではなく、「ゼロを返す間 (あるいは、限り)」 ではありませんか。 the test is negated は、意訳するなら、「評価の条件が否定となる」 というよりも、「評価の条件が逆になる」ではないでしょうか。 もちろん、ほかの訳し方もあるでしょうけれど。 > .\"O A \fIcoprocess\fP is a shell command preceded by the \fBcoproc\fP reserved > .\"O word. > .\"O A coprocess is executed asynchronously in a subshell, as if the command > .\"O had been terminated with the \fB&\fP control operator, with a two-way pipe > .\"O established between the executing shell and the coprocess. > \fIコプロセス (coprocess)\fP は、予約語 \fBcoproc\fP > で始まるシェルのコマンドです。 細かいですが、「コプロセスとは」と「と」を入れた方がよいかもしれません。 > .\"O The standard output of > .\"O .I command > .\"O is connected via a pipe to a file descriptor in the executing shell, > .\"O and that file descriptor is assigned to \fINAME\fP[0]. > .I command > .\"O The standard input of # 次の節の原文がここに来ている。 > の標準出力は、実行しているシェルのファイル・ディスクリプターと > パイプによって接続されます。 > このファイル・ディスクリプターは \fINAME\fP[0] に代入されます。 > .\"O .I command > .\"O is connected via a pipe to a file descriptor in the executing shell, > .\"O and that file descriptor is assigned to \fINAME\fP[1]. シェルのファイルディスクリプタと言っても、いくつもあるでしょうから、 ちょっとくどくなりますが、「シェルのファイル・ディスクリプターの一つ」 と言うべきではないでしょうか。このマニュアルでは「1 つ」という 表記でしたっけ。 > .\"O A shell function is an object that is called like a simple command and > .\"O executes a compound command with a new set of positional parameters. > .\"O Shell functions are declared as follows: > シェル関数は、単純なコマンドとして呼び出されて、 > 新しい位置パラメータのセットを持つ複合コマンドとして実行されるものです。 これも、「シェル関数とは」とする手があります。 結局同じことかもしれませんが、「新しい位置パラメーターの一式を持つ 複合コマンドを実行するものです」でもよさそうです。 > .\"O The exit status of a function definition is zero unless a syntax error > .\"O occurs or a readonly function with the same name already exists. > .\"O When executed, the exit status of a function is the exit status of the > .\"O last command executed in the body. (See > .\"O .SM > .\"O .B FUNCTIONS > .\"O below.) > 関数定義の終了ステータスは、文法エラーが置きた場合や、 > 読み込み専用の関数が同じ名前で定義れていた場合を除き、0 です。 > > 関数を実行したときの終了ステータスは、実体の中で最後に実行されたコマンドの終了ス > テータスになります (後述の > .SM > .B 関数 > を参照) 誤字とタイポがあります。 「文法エラーが置きた」 「定義れていた」 ここでも、一パラグラフの原文を二つに区切っていますが、どうせやるなら、 「関数定義の終了ステータスは」の前にも空行を設けて、三つに区切ったら どうでしょうか。あるいは、空行は「関数定義の終了ステータスは」の 前だけにするという行き方もあると思います。 > .\"O .SH QUOTING > .SH クォート > .\"O \fIQuoting\fP is used to remove the special meaning of certain > .\"O characters or words to the shell. Quoting can be used to > \fIクォート (quoting)\fP を使うと、 > 特定の文字や単語のシェルに対する特別な意味を取り除けます。 「特別な意味を取り除けます」は、ちょっと日本語として苦しいのでは。 > .\"O When the command history expansion facilities are being used > .\"O (see > .\"O .SM > .\"O .B HISTORY EXPANSION > .\"O below), the > .\"O \fIhistory expansion\fP character, usually \fB!\fP, must be quoted > .\"O to prevent history expansion. > 履歴展開の機能 (後述の > .SM > .B 履歴の展開 > を参照) > が使われているときには、\fI履歴展開\fP 文字 (通常は \fB!\fP) は、 > 履歴展開を防ぐためにクォートしなければなりません。 command history expansion はここが初出ですから、「コマンド」を 省略しない方がよいと思います。 履歴展開をさせたくないときにのみ、! をクォートするのですから、 「履歴展開を防ぐためには」と「は」が要るのではないでしょうか。 でも、そうすると、「は」が三つ続いてしまいます。ここは、現行訳でも ほぼよさそうですし、別の訳し方もあると思います。たとえば、 コマンド履歴展開の機能 (後述の「履歴の展開」を参照) が有効に なっているときには、履歴展開をさせたくなかったら、履歴展開文字 (通常は !) をクォートしなければなりません。 > .\"O Enclosing characters in double quotes preserves the literal value > .\"O of all characters within the quotes, with the exception of > .\"O .BR $ , > .\"O .BR \` , > .\"O .BR \e , > .\"O and, when history expansion is enabled, > .\"O .BR ! . > .\"O The characters > .\"O .B $ > .\"O and > .\"O .B \` > .\"O retain their special meaning within double quotes. The backslash > .\"O retains its special meaning only when followed by one of the following > .\"O characters: > .\"O .BR \e , > .\"O or > .\"O .BR <newline> . > .\"O A double quote may be quoted within double quotes by preceding it with > .\"O a backslash. > ダブルクォートで文字を囲むとクォート内部の全ての文字は文字としての値を > 保持しますが、 > .BR $ , > .BR \` , > .BR \e , > は例外となります。 \e の後ろの , は要りません。 > 履歴展開が有効なときには、 > .BR ! . > .B $ > と > .B ` > はダブルクォートの内部でも特殊な意味を失いません。 「.BR ! .」は、文がピリオドで終わっています。次のようにしないと、 意味がよく通じないのではないでしょうか (roff 形式で書きます)。 履歴展開が有効なときは、 .B ! がこれに (あるいは、この例外に) 加わります。 .B $ と .B \` はダブルクォートの内部でも特殊な意味を失いません。 「.B `」は「.B \`」と書いた方がよさそうです。 -- 長南洋一