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

アーカイブの一覧に戻る

長南洋一 cyoic****@maple*****
2011年 10月 7日 (金) 20:05:12 JST


長南です。

先に進みましょう。

気がついたことをどんどん書いてしまいます。どうでもよいことや
わたしが間違っていることもあると思います。わたしが見落とした
ところもあるでしょう。説明不足のところがあれば、遠慮なく
ご指摘ください。できるだけ答えるつもりです。

> .B BASHOPTS

> .\"O If this variable is in the environment when
> .\"O .B bash
> .\"O starts up, each shell option in the list will be enabled before
> .\"O reading any startup files.

> もし
> .B bash
> を起動したときに、この変数が環境変数に設定されていれば、
> 初期化ファイルを読み込む前に、リストにある全てのシェルオプションが
> 有効に設定されます。

startup files の訳語ですが ...。
元の翻訳では、startup file は「起動ファイル」、initialization file は
「初期化ファイル」と訳しています。「起動」セクションを読むと、システム
ワイドの /etc/profile、個人用の ~/.bash_profile や ~/.bashrc などを
すべてひっくるめて、startup file (起動ファイル) と呼んでいるようです。
これに対して、intialization file (初期化ファイル) の方は、多くの場合
personal initialization file という形で現れて、~/.bash_prifile や
~/.bashrc を指しています (「オプション」セクションも参照)。ただし、
例外が一つあり、「ファイル」セクションでは、/etc/profile を
The systemwide initialization file (システム全体用の初期化ファイル)
と言っています。

というわけで、元訳に合わせるなら (と言うか、訳語の統一を考えるなら)、
この startup files は (それから、SHELLOPTS や POSIXLY_CORRECT 変数の
startup files も)「起動ファイル」になると思います。もっとも、厳密に
区別する必要はないとも考えられますけれど。

# statup file や initialzation file を検索したときに気づいたことを
# 忘れないうちに書いておきます。
#
# --rcfile オプションの説明中、
#
# > .\"O Execute commands from
# > .\"O .I file
# > .\"O instead of the standard personal initialization file
# > .\"O .I ~/.bashrc
#
# > 対話的シェルとして起動された場合、
# > 個人用の初期化ファイル
# > .I ~/.bashrc
# > の代わりに
# > .I file
# > からコマンドを実行します (後述の
#
# standard の訳が抜けています。

> .B BASHPID
> .\"O Expands to the process ID of the current \fBbash\fP process.
> .\"O This differs from \fB$$\fP under certain circumstances, such as subshells
> .\"O that do not require \fBbash\fP to be re-initialized.
> 現在の \fBbash\fP のプロセス ID に展開されます。
> \fBbash\fP を再初期化しないサブシェルのような、いくつかの環境においては、
> \fB$$\fP と値が異なります。

「bash を再初期化しない」と「bash の再初期化を必要としない」とでは、
少し違うのではないかと思うのですが、結局は同じことですか。

> .B BASH_CMDS
> .\"O An associative array variable whose members correspond to the internal
> .\"O hash table of commands as maintained by the \fBhash\fP builtin.
> .\"O Elements added to this array appear in the hash table; unsetting array
> .\"O elements cause commands to be removed from the hash table.
> 組み込みコマンド \fBhash\fP で扱うコマンドの内部的なハッシュテーブルに
> 対応する連想配列変数です。
> この配列に要素を追加すると、ハッシュテーブルにも追加されます。
> 配列から要素を削除すると、ハッシュテーブルから削除されます。

英文と突き合わせて見ると、大胆な省略を行って、上手な訳だと思う
のですが、訳文だけでは、「組み込みコマンド hash で扱う」が
どこまでかかるか曖昧です。それに、「コマンドの内部的な」が
「コマンドの内部にハッシュテーブルがある」と取れてしまうと
いうこともあります。

こんな訳はどうでしょう。maintain は「管理」と訳してみました。
「操作」という訳もあるかもしれません。

  bash が内部に持つ、コマンドのハッシュテーブルに対応する連想配列変数です。
  通常ハッシュテーブルはビルトインコマンド hash で管理します。

あるいは、

  連想配列変数であり、各メンバ (訳語の統一を考えると「要素」か) は
  bash が内部に持つコマンドのハッシュテーブルと対応しています。
  ハッシュテーブルは、通常ビルトインコマンド hash で操作します。

あるいは、今の訳文をできるだけ生かして、

  通常は組み込みコマンド hash で管理する、bash 内部のコマンド・ハッシュ
  テーブルに対応する連想配列変数です。

# 「通常」という補足は、as maintained の as のニュアンスのつもりです。
# 違うかもしれませんが。

翻って、BASH_ALIASES の訳についても同じことが言えます。
BASH_ALIASES の場合は、「組み込みコマンド alias で扱う」が
エイリアスに付いても、リストに付いても、意味が通るので気がつき
ませんでした。

> .B BASH_ALIASES
> .\"O An associative array variable whose members correspond to the internal
> .\"O list of aliases as maintained by the \fBalias\fP builtin.
> .\"O Elements added to this array appear in the alias list; unsetting array
> .\"O elements cause aliases to be removed from the alias list.
> 組み込みコマンド \fBalias\fP で扱うエイリアスの内部的なリストに
> 対応する連想配列変数です。
> この配列に要素を追加すると、エイリアスのリストにも追加されます。
> 配列から要素を削除すると、エイリアスがリストから削除されます。

  bash が内部に持つ、エイリアスのリストに対応する連想配列変数です。
  通常エイリアスのリストは組み込みコマンド alias で管理します。

あるいは、

  通常は組み込みコマンド hash で管理する、bash 内部のエイリアスの
  リストに対応する連想配列変数です。

> .B BASH_COMMAND
> .\"O The command currently being executed or about to be executed, unless the
> .\"O shell is executing a command as the result of a trap,
> .\"O in which case it is the command executing at the time of the trap.
> 現在実行しているか実行しようとしているコマンドです。
> ただし、トラップによりコマンドを実行しているときのコマンドは除きます。

「ただし」以下は、「ただし、トラップによって実行されるコマンドは
除きます」で十分では。あるいは、原文どおり「ただし、トラップの結果
として、シェルが実行しているコマンドは除きます」か。

それから、「in which case it is the command executing at the time of
the trap」の訳が抜けています。

> .B BASH_LINENO
> .\"O An array variable whose members are the line numbers in source files
> .\"O where each corresponding member of
> .\"O .SM
> .\"O .B FUNCNAME
> .\"O was invoked.
> ソースファイル中の行番号に対応する要素からなる配列変数で、
> それぞれの要素は
> .SM
> .B FUNCNAME
> の各要素が呼び出された位置に対応します。

corresponding という言葉の意味を「それぞれ」と「各」の呼応にまかせて
しまったのですね (つまり、訳文中の「対応する」は、原文の corresponding
とは関係がない)。こなれた訳し方だと思います。

「ソースファイル中の行番号に対応する要素からなる配列変数で」の
「対応」の方は、厳密に言えば、配列の要素が行番号なのではなく、
要素の値が行番号なので、「対応」という間接的な言い方になさった
のでしょうか。でも、間接的な分だけ、行番号と配列の要素との関係が
直感的につかみにくくなっていると思います。

「ソースファイル中の行番号を値とする要素からなる配列変数で」と
はっきり言ってしまった方がよいのではないでしょうか。ちょっと冗長なので、
「ソースファイル中の行番号を要素の値とする配列変数で」も考えました。
「ソースファイル中の行番号を要素とする配列変数で」ですめば、一番
すっきりするのですが、言葉が足りないでしょうか。

「各要素が呼び出された位置に対応します」の方も、「... 位置を表します」
などと言い換えることができますが、こちらは「対応します」のままで
よさそうです。

> .\"O \fB${BASH_LINENO[\fP\fI$i\fP\fB]}\fP is the line number in the source
> .\"O file (\fB${BASH_SOURCE[\fP\fI$i+1\fP\fB]}\fP) where
> .\"O \fB${FUNCNAME[\fP\fI$i\fP\fB]}\fP was called
> .\"O (or \fB${BASH_LINENO[\fP\fI$i-1\fP\fB]}\fP if referenced within another
> .\"O shell function).
> \fB${BASH_LINENO[\fP\fI$i\fP\fB]}\fP がソースファイル
> (\fB${BASH_SOURCE[\fP\fI$i+1\fP\fB]}\fP)
> 中で\fB${FUNCNAME[\fP\fI$i\fP\fB]}\fP が呼び出された行番号です。
> 別のシェル関数から参照されると \fB${BASH_LINENO[\fP\fI$i-1\fP\fB]}\fP
> になります。

この文は、前の文を具体的に説明したものですから、「すなわち、
${BASH_LINENO[$i]} は」などとすると、前の文とのつながりが
よくなるかもしれません。

それから、(or ${BASH_LINENO[$i-1]} if referenced within another shell
function) のカッコを省略なさっていますが、意図的なものですか。
たしかに、このカッコはなくてもよいと思います。  

> .\"O Use
> .\"O .SM
> .\"O .B LINENO
> .\"O to obtain the current line number.
> 現在の行番号は
> .SM
> .B LINENO
> です。

原文は、現在の行番号を知りたければ、BASH_LINENO ではなく、LINENO を
使え、と言っているのですから、Use LINENO to obtain を生かした方が
よいのではないでしょうか。一般に原文の省略は、その方が文がわかりやすく
なるとき以外、やらない方がよいと思います。

> .B BASH_SOURCE
> .\"O An array variable whose members are the source filenames
> .\"O where the corresponding shell function names in the
> .\"O .SM
> .\"O .B FUNCNAME
> .\"O array variable are defined.
> .\"O The shell function
> ソースファイル名に対応する要素からなる配列変数で、
> それぞれの要素は配列変数
> .SM
> .B FUNCNAME
> の要素のシェル関数がそれぞれ定義されたファイル名に対応します。

ここも corresponding を「それぞれ」に移しているわけですから、
「対応」という言葉はいらなくなっていると思います。
全文を書くと、

  ソースファイル名を要素とする配列変数で、各要素は、配列変数
  FUNCANAME の要素であるシェル関数がそれぞれ定義されている
  ファイルの名前です。

ソースファイル名は要素ではなく、要素の値だということなら、

  ソースファイル名を要素の値とする配列変数で、各要素には、配列変数
  FUNCANAME の要素 (の値) であるシェル関数がそれぞれ定義されている
  ファイルの名前が入っています。

> .B COMP_CWORD
> .\"O An index into \fB${COMP_WORDS}\fP of the word containing the current
> .\"O cursor position.
> .\"O This variable is available only in shell functions invoked by the
> .\"O programmable completion facilities (see \fBProgrammable Completion\fP
> .\"O below).
> 現在カーソル位置が置かれている単語の
> \fB${COMP_WORDS}\fP におけるインデックスです。
> この変数はプログラム補完機能 (後述の \fBプログラム補完\fP を参照)
> から呼ばれたシェル関数においてのみ有効です。

「カーソル位置が置かれている」は重複表現のような気がします。
「カーソル位置がある」か「カーソルが置かれている」でよいのでは
ないでしょうか。

「${COMP_WORDS} における」は「配列変数 ${COMP_WORDS} における」と
した方がよいかもしれません。

語感の問題ですから、無視して構いませんが、available は「利用できる」
と言った方が、具体的で明晰だと思います (available/有効は以下でも
何回か出てきました)。

# 「プログラム補完」を読んでみましたが、よくわかりませんでした。
# ですから、このへんでわたしが言うことは、内容を理解していない人間の
# 言うことです。その程度に考えてください。ちゃんとわかっている方に内容を
# チェックしてほしい、と思っています。

> .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
の場合は関数なんですか。

> .B COMP_LINE
> .\"O The current command line.
> .\"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プログラム補完\fP を参照)
> から呼ばれたシェル関数においてのみ有効です。

and external commands の訳が抜けています。

> .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 を参照)
> から呼ばれたシェル関数においてのみ有効です。

ここも and external commands の訳が抜けています。

この「インデックス」は先頭から何番目の文字かということですね。
それならば、正しい訳ですが、配列のインデックスとまぎらわしい
と思います。何か適当な訳語を工夫できないでしょうか。

> .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 を参照)
> から呼ばれたシェル関数と外部コマンドにおいてのみ有効です。

ここの completion function も「関数」か「機能」かという疑問が
あると思います。

プログラミングをよく知らないので、間違っているかもしれませんが、
この an integer value というのは、TAB, ?, ! などを int 型の値として
変数に格納するということではないでしょうか。それは「整数値」というのと
同じことですか。

to list completions if the word is not unmodified が、どうして
「途中での一致がないときの候補のリスト表示です」になるのか、
わかりません。そもそも原文がわからないのです。if the word is
not unmodified というのは、要するに「単語が変更を受けている場合」
ということだと思いますが、具体的にはどういうことなんでしょうか。
たとえば、ls work/ と打ち込んで TAB を二回押すと、候補リストが
表示される。そのとき、font と打ち込んで (つまり、modify する)、
font 何とかというファイルのリストだけを表示させる。そういうこと
でしょうか。それとも、一回目の補完 (つまり word が unmodified では
なくなった) の後に、二回目、三回目の補完をすることでしょうか。
原文に間違いがあるという可能性も除外できませんし。

> .B COMP_WORDBREAKS
> .\"O The set of characters that the \fBreadline\fP library treats as word
> .\"O separators when performing word completion.
> .\"O If
> .\"O .SM
> .\"O .B COMP_WORDBREAKS
> .\"O is unset, it loses its special properties, even if it is
> .\"O subsequently reset.
> 単語補完のときに \fBreadline\fP ライブラリが単語分割の区切り文字として
> 扱う文字の並びです。
> .SM
> .B COMP_WORDBREAKS
> を unset すると、この変数の特殊な性質はなくなります。後で再び
> set しても元には戻りません。

原文の問題かもしれませんが、「この変数の特殊な性格はなくなります」
というのは、具体的にどういうことなんでしょう。
special properties という言葉は、変数 DIRSTACK, FUNCNAME, GROUPS,
HISTCMD, RANDOM, SECONDS でも使われています。

> .B FUNCNAME
> .\"O An array variable containing the names of all shell functions
> .\"O currently in the execution call stack.

> 現在実行している呼び出しスタックにある全てのシェル関数名が
> 入った配列変数です。

「現在実行している」はどこにかかるのでしょうか。それから、「現在」は
「execution call stack に現在存在する」とかかるのだと思います (あれっ、
「実行している」にかけても事実上同じことかな)。execution call stack の
定訳があるなら、それを使うのが一番よいのですが。

ちなみに、このマニュアル中では、execution call stack は「bash が
実行している呼び出しスタック」(BASH_ARGC、BASH_ARGV)、「呼び出し
スタック」(caller) と訳されています。

> .\"O This variable can be used with \fBBASH_LINENO\fP and \fBBASH_SOURCE\fP.
> .\"O Each element of \fBFUNCNAME\fP has corresponding elements in
> .\"O \fBBASH_LINENO\fP and \fBBASH_SOURCE\fP to describe the call stack.

> この変数は \fBBASH_LINENO\fP や \fBBASH_SOURCE\fP と組になっています。
> \fBFUNCNAME\fP の各要素は \fBBASH_LINENO\fP や \fBBASH_SOURCE\fP
> の各要素に対応し、呼び出しスタックを表します。

can be used with と「組になっている」では微妙に違うのではないでしょうか。
確かに、一番言いたいのは、そういうことなんでしょうけれど。

describe というのは、「小学館ランダムハウス英和辞典」には、
「対象物の外観・性質・属性などを明かにするためのイメージまたは印象を
言葉によって伝達すること」と注が付いていますから、「表す」というより
「説明する」に近いと思います。ここでは、「FUNCNAME の各要素は、
BASH_LINENO や BBASH_SOURCE に対応する要素を持ち、(その三つが一緒に
なって) call stack についての情報を提供している」ということでは
ないでしょうか。「例えば、${FUNCNAME[$i]} は」以下が、その情報の
具体例になるわけです。

> .B LINENO
> .\"O Each time this parameter is referenced, the shell substitutes
> .\"O a decimal number representing the current sequential line number
> .\"O (starting with 1) within a script or function.  When not in a

> この変数が参照されると、
> シェルはスクリプトや関数における現在の行番号 (1から始まります) を表す
> 10 進値を代入します。スクリプトや関数の内部でない場合には、

Each は生かした方がよいと思います。assigns ではなく、substitutes
ですから、「代入」を使うなら、「代入し直す」では。

> .B PIPESTATUS
> .\"O An array variable (see
> .\"O .B Arrays
> .\"O below) containing a list of exit status values from the processes
> .\"O in the most-recently-executed foreground pipeline (which may
> .\"O contain only a single command).
> フォアグラウンドのパイプラインで最後に実行されたプロセスの
> 終了ステータスのリストを含む配列変数です (後述の
> .B 配列
> を参照)。
> パイプラインには 1 つのコマンドしかなくてもかまいません。

「フォアグラウンドのパイプラインで最後に実行されたプロセスの」ではなく、
「フォアグラウンドで最後に実行したパイプラインの各プロセスの」では
ありませんか。「各プロセス」と訳したのは、複数であることを表に
出さないと、配列であることがピンと来ないからです。

(whichi may ... command) のカッコを取ったのは正解だと思います。

> .B READLINE_POINT
> .\"O The position of the insertion point in the
> .\"O .B readline
> .\"O line buffer, for use with
> .B readline
> の編集バッファでのポイントの位置です。

insertion の訳がありませんが、なくても同じことですか。

> .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 を起動する、それが何回行われたか
ということのようですが。

The following variables are used by the shell 以下に列挙される
変数については、次回にまわします。

-- 
長南洋一




linuxjm-discuss メーリングリストの案内
アーカイブの一覧に戻る