[JM:00446] Re: [POST:DO] bash bash.1

Back to archive index

Akihiro MOTOKI amoto****@gmail*****
2011年 10月 13日 (木) 02:32:13 JST


元木です。こんばんわ。

訳のチェックの方ですが、READLINE 以降を読んでいます。
だいぶ進んだので、そろそろ投稿したいと思います。

少し長くなりますが、関連部分はそのまま残してコメントします。

At Wed, 12 Oct 2011 20:28:12 +0900 (JST),
長南洋一 wrote:

> >>> .B COMP_KEY
> >>> .\"O The key (or final key of a key sequence) used to invoke the current
> >>> .\"O completion function.
> >>> 現在の補完関数を呼び出したキー (またはキーシーケンスの最後のキー) です。
> >>
> >> この completion function は「関数」ではなく、「機能」ではないのですか。
> >> キーとかキーシーケンスというのは、「Readline のコマンド名」の「補完」に
> >> 書いてある complete (TAB) や possible-completions (M-?) の TAB や M-? の
> >> ことなんでしょうか。そこでは complete などは、セクション名にあるように、
> >> 関数ではなく、コマンドと呼んでいるようですが、Programmable Completion
> >> の場合は関数なんですか。
> > 
> > この function は関数ですね。コマンドでもいいです。
> 
> 「関数」が正しいとすれば、これは翻訳の問題ではなく、原文の問題ですね。
> 「補完関数」という言葉は、ここで初めて唐突に出てきます。読者は
> 補完のメカニズムがわかっていないわけですから、かなり戸惑うと思います。
> 一般ユーザに TAB を押して補完機能を使っているという意識はあっても、
> 補完関数を使っているという意識はないでしょうし。
> 
> bash の info を見てみたら、COMP_KEY と COMP_TYPE の順番が逆に
> なっていました。
> 
> つまり、COMP_TYPEの「補完のタイプに応じて補完関数が呼び出される」
> という記述が先になり、その後に COMP_KEY の「現在の補完関数を呼び
> 出したキーです」が現れます。これなら、唐突さはありません。
> man ページをまとめた方が、順番が逆になったこと対する気配りを
> 忘れたわけで、翻訳する側としては、これは仕方がないですね。
> まあ、工夫の余地がないわけではありませんけれど。たとえば、
> man ページも順番を逆にしてしまうとか。

私も逆順にしてしまった方が分かりやすいように感じました。
翻訳の方にコメントで意図的に逆順にしていると書いておけば、
今後の更新の際にも混乱することもないと思います。

> >>> .B COMP_POINT
> >>> .\"O The index of the current cursor position relative to the beginning of
> >>> .\"O the current command.
> >>> .\"O If the current cursor position is at the end of the current command,
> >>> .\"O the value of this variable is equal to \fB${#COMP_LINE}\fP.
> >>> .\"O This variable is available only in shell functions and external
> >>> .\"O commands invoked by the
> >>> .\"O programmable completion facilities (see \fBProgrammable Completion\fP
> >>> .\"O below).
> >>> 現在のコマンドの先頭からの相対値として与えられた
> >>> カーソル位置のインデックスです。
> >>> 現在のカーソル位置が現在の現在のコマンドの最後にある場合、
> >>> この変数の値は \fB${#COMP_LINE}\fP と等しくなります。
> >>> この変数はプログラム補完機能 (後述の \fBプログラム補完\fP を参照)
> >>> から呼ばれたシェル関数においてのみ有効です。
> 
> >> この「インデックス」は先頭から何番目の文字かということですね。
> >> それならば、正しい訳ですが、配列のインデックスとまぎらわしい
> >> と思います。何か適当な訳語を工夫できないでしょうか。
> > 
> > C をはじめ各プログラミング言語では文字列中の位置を「インデックス」
> > と呼ぶことも多いこと、補完関数を書く人はプログラミング経験のある人が
> > 対象であることから、「インデックス」でよいかと思います。
> 
> このマニュアルはセクション 1 のマニュアルですから、一般ユーザが
> 読むことを想定した方がよいのではないでしょうか。そう考えると、
> 日本語の「インデックス」に「文字列中の位置」の意味を持たせるのは、
> ちょっと無理だと思います。一般ユーザにもプログラマーにも通用する
> 訳語を工夫するのは、翻訳者の腕の見せ所ですし。
> 
> もっとも、一般ユーザはこんな細かい変数の説明まで読むわけがないと
> 考えることもできますけれど。

なぜ、原文の著者が the index of the current cursor position のように
index を付けたのかが理解できませんでした。
the index of を付けずに the current cursor position とだけ書いても、
文章の内容の正確性には全く影響を与えないように思います。

訳としても、

  現在のコマンドの先頭からの相対値として与えられた現在のカーソル位置です。

としてもよいように思います。
ちょっと読みにくいので、

  現在のカーソル位置の、現在のコマンドの先頭からの相対的な位置です。

などを考えてみました。

> >>> .B COMP_TYPE
> >>> .\"O Set to an integer value corresponding to the type of completion attempted
> >>> .\"O that caused a completion function to be called:
> >>> .\"O \fITAB\fP, for normal completion,
> >>> .\"O \fI?\fP, for listing completions after successive tabs,
> >>> .\"O \fI!\fP, for listing alternatives on partial word completion,
> >>> .\"O \fI@\fP, to list completions if the word is not unmodified,
> >>> .\"O or
> >>> .\"O \fI%\fP, for menu completion.
> >>> .\"O This variable is available only in shell functions and external
> >>> .\"O commands invoked by the
> >>> .\"O programmable completion facilities (see \fBProgrammable Completion\fP
> >>> .\"O below).
> >>> 補完関数を呼び出した補完のタイプに対応する整数値が設定されます。
> >>> \fITAB\fP は通常の補完です。
> >>> \fI?\fP は連続したタブ入力による候補のリスト表示です。
> >>> \fI!\fP は途中まで補完した後の候補のリスト表示です。
> >>> \fI@\fP は、途中での一致がないときの候補のリスト表示です。
> >>> \fI%\fP はメニュー補完 (menu completion)です。
> >>> この変数はプログラム補完機能 (後述の \fBプログラム補完\fP を参照)
> >>> から呼ばれたシェル関数と外部コマンドにおいてのみ有効です。
> 
> >> to list completions if the word is not unmodified が、どうして
> >> 「途中での一致がないときの候補のリスト表示です」になるのか、
> >> わかりません。そもそも原文がわからないのです。
> 
> > 機能からいうと、'!' と '@' はそれぞれ、readline の変数の
> > show-all-if-ambiguous と show-all-if-unmodified が On になって
> > いるとき固有の補完の動作を表します。
> > 
> > かなり長くなりますが、以下に実際の動作を示します。
> 
> 詳しい説明ありがとうございます。ご説明を「Readline の変数」の
> show-all-if-ambiguous や show-all-if-unmodified と合わせて読んで、
> 何故「途中での一致がないときの候補のリスト表示です」になるのか
> わかったような気がします (「途中での」は「途中までの」のタイプミス
> ですか)。
> 
> しかし、そうだとすると、これは原文が間違っているのでしょうか (not と
> un のどちらかが不要)。それとも、「目下補完中の単語をユーザが
> 何か文字を打ち込むことによって変更しないでもない (変更する必要がある)
> ときは」ということなんでしょうか。それでは、show-all-if-unmodified と
> 矛盾するだろうし ... いづれにしても、これは原文が意味不明瞭ですから
> (わたしの読解力が足りないのかもしれませんが)、原文を離れ、実際の動作に
> 即してお訳しになったのも、当然だと思います。

原文が間違っていると思います。
if the word is unmodified のように思います。

> >>> .\"O \fI@\fP, to list completions if the word is not unmodified,
> >>> \fI@\fP は、途中での一致がないときの候補のリスト表示です。

で、訳の方ですが、
長南さんご指摘のように「途中までの」に直したとしても、
日本語だけを読んだ際に、「途中までの一致がないとき」が何かを
理解するのは難しいように思います。
原文のように、補完対象の文字が変更されていない場合、といった方が
個人的には理解しやすかったです。
show-all-if-unmodified の説明を参考にして、少し意訳を考えてみました。
「(部分的な補完が行われず) 補完対象の単語が変更されていない状況でのリスト表示」

> >>> .B READLINE_POINT
> >>> .\"O The position of the insertion point in the
> >>> .\"O .B readline
> >>> .\"O line buffer, for use with
> >>> .B readline
> >>> の編集バッファでのポイントの位置です。
> >>
> >> insertion の訳がありませんが、なくても同じことですか。
> > 
> > はい。
> 
> インサーション・ポイント (挿入ポイント) なら、位置が限定されますが、
> ポイントと言っただけでは、位置が限定されないのでないかと思うのですが。

READLINE のセクションの Readline Command Names では、
point は current cursor position だと説明があり、
それ以降では point と mark のペアで説明がされています。

一方、insertion point や READLINE_POINT, READLINE_LINE は
シェル変数および組み込みコマンドの節でしか登場しないので、
READLINE セクションの説明の前提はおかない方がよいと思います。

訳としては、挿入ポイントか、(意訳するとしたら) 現在のカーソル位置、あたりでしょうか。

> >>> .B SHLVL
> >>> .\"O Incremented by one each time an instance of
> >>> .\"O .B bash
> >>> .\"O is started.
> >>> .B bash
> >>> の実体が起動されるたびに 1 ずつ増えます。
> >>
> >> 「実体」というのは、instance の訳として熟しているのですか。
> >> instance の訳はむずかしいものです。この場合は、bash の中で
> >> bash を起動し、またそこから bash を起動する、それが何回行われたか
> >> ということのようですが。
> > 
> > この instance はほぼプロセスと同じ意味かと思います。
> > bash を起動するとプロセスが起動するのは自明であり、
> > 「実体」という言葉の扱いが難しいようですので、
> > 「の実体」を削りました。
> 
> こうなさったのですね。
> 
>   SHLVL    bash が起動されるたびに 1 ずつ増えます。
> 
> xterm から xterm を起動すれば、二番目の xterm の $SHLVL は 2 に
> なりますが (一番目の xterm の $SHLVL は 1 のまま)、WM のメニューや
> アイコンから xterm をいくつ起動しても、みんな $SHLVL は 1 です。
> ですから、訳には言葉がもう少し必要な気がします。
> 
> ちょっと苦しまぎれですが、すぐ思いつくのは、「(bash から) bash が
> 起動されるたびに」とカッコを使うことです。あるいは、instance を
> 「インスタンス」とカタカナにしておく手もあると思います。読者に意味は
> 通じないかもしれませんが、少なくとも、bash が単に起動されることを
> 言っているのではないのだ、ということは伝わるでしょうから。
> 
> 何かよい訳を思いつかれることを期待しています。

bash から bash を起動するごとに SHLVL が 1 ずつ増えるということですが、
bash -> zsh -> bash と繰り返しても $SHLVL が増えて行きます。
サブプロセスとして bash が起動されると、SHLVL が増えるということでしょうか。

bash# echo $SHLVL
1
bash# zsh
zsh# echo $SHLVL
2
zsh# bash
bash# echo $SHLVL
3
bash# 

-- 
Akihiro MOTOKI <amoto****@gmail*****>




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