[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[debian-devel:15355] bash の初期化がおかしい



久保田です。

この現象は bash のバグだと思うのですが、BTS で英語で説明するよりも
こちらのほうが解決の近道かもしれないと思うので、こちらに投稿します。

bash 2.05b-3 を使っています。ja_JP.eucJP ロケールを作ってあります。
また、~/.bash_profile と ~/.bashrc の両方に

  LANG=ja_JP.eucJP
  export LANG

と書いていある状態です。


まず、この状態で (ssh を使って) ログインすると、(1) cd コマンドの
エラーが (過去の OUTPUT_CHARSET 問題のときみたいに) 「?」で表示され、
(2) bash 2.05b-1 から有効になったはずのマルチバイト/マルチカラム文字
の編集機能が働きません。

まず (1) ですが、

  $ echo $LANG
  ja_JP.eucJP
  $ set | grep LANG
  LANG=ja_JP.eucJP
  $ cd notexist
  -bash: cd: notexist: ??????????????????????

となります。(2) は、たとえば「あ」と入力してから Backspace を押すと、
「あ」という文字全体が消えるべきなのに、右半分しか消えません。

次に、

  $ LANG=ja_JP.eucJP

としてみます。本来なら、LANG はすでに ja_JP.eucJP に設定されている
はずなので、何の効果もないはずです。が、これを行うと、(2) が解決
してしまいます。(1) は解決しません。

さらに、LANG=ja_JP.eucJP の状態で、bash を手動で起動してみます。

  $ echo $LANG
  ja_JP.eucJP
  $ bash
  $ echo $LANG
  ja_JP.eucJP
  $ cd notexist
  bash: cd: notexist: そのようなファイルやディレクトリはありません
  $ exit
  exit
  $ cd notexist
  -bash: cd: notexist: ??????????????????????

と、起動した bash の中でのみ (1) が解決していることがわかります。
なお、起動した bash の中では、(2) も解決しています。

今回は、OUTPUT_CHARSET {シェル変数|環境変数} をいろいろいじって
みても、(1) の解決には役に立たないことが分かりました。

これは、bash の起動および初期化プロセスに何か問題があるような
気がします。つまり、bash の起動時にすでに LANG が設定されていれば
エンコーディング変換およびマルチバイト/マルチカラム編集機能が
正しく動くけど、~/.bash_profile や ~/.bashrc の中だとだめです。
LANG の値そのものは設定されているので、~/.bash_profile や
~/.bashrc が認識されていないということはありません。

(また、「cd notexist」に対するメッセージの最初の文字「-」も、
ちょっと気になります。何なのでしょうか?)


バグの原因が見当がつきそうな方は、いらっしゃいませんか。
あるいは、「うちではうまく動いてるけど...」という方が
いらっしゃったりしますか?

---
久保田智広 Tomohiro KUBOTA <kubota@debian.org>
http://www.debian.or.jp/~kubota/
"Introduction to I18N"  http://www.debian.org/doc/manuals/intro-i18n/