7.8. Bash Shellの起動ファイル

The shell program /bin/bash (hereafter referred to as “the shell”) uses a collection of startup files to help create an environment to run in. Each file has a specific use and may affect login and interactive environments differently. The files in the /etc directory provide global settings. If an equivalent file exists in the home directory, it may override the global settings.

shellプログラム/bin/bash(今後、“shell”と呼ぶ)は、実行する環境を作成するために、いくつかの起動ファイルを使用します。 それぞれのファイルは個々の用途があり、また、ログインと対話環境に異なった影響を与えます。 /etcディレクトリののファイルは、グローバルな設定を提供します。 もし同じファイルがホームディレクトリに存在する場合、ホームディレクトリにあるファイルが、グローバルの設定を上書きします。

An interactive login shell is started after a successful login, using /bin/login, by reading the /etc/passwd file. An interactive non-login shell is started at the command-line (e.g., [prompt]$/bin/bash). A non-interactive shell is usually present when a shell script is running. It is non-interactive because it is processing a script and not waiting for user input between commands.

ログイン成功の後、/bin/loginを使用し、/etc/passwdが読まれ、対話式のログインshellが起動されます。 そして、コマンドラインで対話式の非ログインshellが起動されます(例:[prompt]$/bin/bash)。 シェルスクリプトを実行する時、通常は非対話式shellが動きます。 非対話式なのは、スクリプトを処理しコマンドを実行する間は、ユーザの入力を待たないからです。

For more information, see info bash under the Bash Startup Files and Interactive Shells section.

より詳しい情報は、info bashBash Startup Files and Interactive Shellsセクションを見てください。

The files /etc/profile and ~/.bash_profile are read when the shell is invoked as an interactive login shell.


The base /etc/profile below sets some environment variables necessary for native language support. Setting them properly results in:

後で示す、基本となる/etc/profileでは、Native Language Supportに必要ないくつかの環境変数をセットします。

Replace <ll> below with the two-letter code for the desired language (e.g., “en”) and <CC> with the two-letter code for the appropriate country (e.g., “GB”). <charmap> should be replaced with the canonical charmap for your chosen locale. Optional modifiers such as “@euro” may also be present.

以下で、<ll>は希望する言語を表す2文字のコードに置き換えて下さい(例:“en”)。 また、<CC>は適した国を表す2文字のコードに置き換えて下さい(例:“GB”)。 <charmap>は、あなたが選択したロケールの標準的なキャラクターマップに置き換えるべきです。 “@euro”のようなオプションの修飾子も存在します。

The list of all locales supported by Glibc can be obtained by running the following command:


locale -a

Charmaps can have a number of aliases, e.g., “ISO-8859-1” is also referred to as “iso8859-1” and “iso88591”. Some applications cannot handle the various synonyms correctly (e.g., require that “UTF-8” is written as “UTF-8”, not “utf8”), so it is safest in most cases to choose the canonical name for a particular locale. To determine the canonical name, run the following command, where <locale name> is the output given by locale -a for your preferred locale (“en_GB.iso88591” in our example).

キャラクターマップはたくさんの別名を持つことが出来ます。 例:“ISO-8859-1”は、“iso8859-1”と“iso88591”として参照されます。 いくつかのアプリケーションは、様々な別名を正しく取り扱えません(例:“UTF-8”は、“utf8”ではなく“UTF-8”と書く必要がある)。したがって、ほとんどのケースにおいて、特定のロケールの正式な名称を選ぶことが最も安全です。 正式な名称を特定するためには、次のコマンドを実行して下さい。<locale name>は、locale -aの結果から選んだロケールを入れます(“en_GB.iso88591”は例です)。

LC_ALL=<locale name> locale charmap

For the “en_GB.iso88591” locale, the above command will print:



This results in a final locale setting of “en_GB.ISO-8859-1”. It is important that the locale found using the heuristic above is tested prior to it being added to the Bash startup files:

この結果、“en_GB.ISO-8859-1”の最終的なロケール設定となります。 Bashの起動ファイルに追加するよりも前に、上記ヒューリスティックな方法を用いて見つけたロケールでテストを行うことが重要です。

LC_ALL=<locale name> locale language
LC_ALL=<locale name> locale charmap
LC_ALL=<locale name> locale int_curr_symbol
LC_ALL=<locale name> locale int_prefix

The above commands should print the language name, the character encoding used by the locale, the local currency, and the prefix to dial before the telephone number in order to get into the country. If any of the commands above fail with a message similar to the one shown below, this means that your locale was either not installed in Chapter 6 or is not supported by the default installation of Glibc.

上記コマンドは、言語名、ロケールが使用するキャラクターエンコーディング、現地通貨、その国に電話するために、電話番号の最初に付加する番号を表示するはずです。 もし上記コマンドのいずれかが、以下に示したメッセージと似た内容のメッセージを出力して失敗した場合、ロケールが6章でインストールされていないか、Glibcのデフォルトのインストールでサポートされないかのどちらかを意味しています。

locale: Cannot set LC_* to default locale: No such file or directory

If this happens, you should either install the desired locale using the localedef command, or consider choosing a different locale. Further instructions assume that there are no such error messages from Glibc.

もし上記メッセージが表示された場合、必要なロケールをlocaledefコマンドでインストールするか、別のロケールを選択することを検討すべきです。 これ以降の手順では、Glibcからそのようなエラーが出力されない状態を想定しています。

Some packages beyond LFS may also lack support for your chosen locale. One example is the X library (part of the X Window System), which outputs the following error message if the locale does not exactly match one of the character map names in its internal files:

LFSの範囲外のいくつかのパッケージはまた、あなたが選んだロケールをサポートしていないかもしれません。 一例はXライブラリ(X Window Systemの一部)で、ロケールが、Xライブラリが内部でファイルに保持しているキャラクターマップのひとつにマッチしない場合、次のエラーメッセージが出力されます:

Warning: locale not supported by Xlib, locale set to C

In several cases Xlib expects that the character map will be listed in uppercase notation with canonical dashes. For instance, "ISO-8859-1" rather than "iso88591". It is also possible to find an appropriate specification by removing the charmap part of the locale specification. This can be checked by running the locale charmap command in both locales. For example, one would have to change "de_DE.ISO-8859-15@euro" to "de_DE@euro" in order to get this locale recognized by Xlib.

いくつかのケースにおいて、XLibは、キャラクターマップがダッシュ記号付きの大文字表記でリストされていることを期待しています。 例えば、"iso88591"ではなく"ISO-8859-1"を期待しています。 ロケール指定のキャラクターマップ部分を削除することで、適切なロケール指定を見つけることも可能です。 これはlocale charmapコマンドを両方のロケールで実行することで、チェックすることが出来ます。 例えば、ロケールがXlibから認識されるようにするため、"de_DE.ISO-8859-15@euro"を"de_DE@euro"に変更する必要があります。

Other packages can also function incorrectly (but may not necessarily display any error messages) if the locale name does not meet their expectations. In those cases, investigating how other Linux distributions support your locale might provide some useful information.

そのほかのパッケージにおいても、ロケール名が期待したものではない場合、うまく機能しないかもしれません(ただし、必ずしもエラーメッセージが表示されるとは限りません)。 そのようなケースにおいて、他のLinuxディストリビューションがあなたが指定したロケールをどのようにサポートしているか調査することで、何らかの良い情報が得られるかもしれません。

Once the proper locale settings have been determined, create the /etc/profile file:


cat > /etc/profile << "EOF"
# Begin /etc/profile

export LANG=<ll>_<CC>.<charmap><@modifiers>

# End /etc/profile

The “C” (default) and “en_US” (the recommended one for United States English users) locales are different. “C” uses the US-ASCII 7-bit character set, and treats bytes with the high bit set as invalid characters. That's why, e.g., the ls command substitutes them with question marks in that locale. Also, an attempt to send mail with such characters from Mutt or Pine results in non-RFC-conforming messages being sent (the charset in the outgoing mail is indicated as “unknown 8-bit”). So you can use the “C” locale only if you are sure that you will never need 8-bit characters.

C”ロケール(デフォルト)と“en_US”ロケール(米国の英語ユーザの推奨)は異なります。 “C”はUS-ASCII 7-bitキャラクターセットを使用し、最上位ビットが立ったバイトを無効なキャラクターとして取り扱います。 そんなわけで、例えばlsコマンドは、無効なキャラクターをクエスチョンマークに置き換えます。 また、そのような無効なキャラクターを含むメールをMuttやPineから送ろうとすると、RFCの基準に沿っていないメッセージが送られることになります(外部に送信するメールのキャラクターセットは、“unknown 8-bit”と表示されます)。 したがって、8-bitキャラクターが決して必要ないことが確実であるときだけ、“C”ロケールを使用できます。

UTF-8 based locales are not supported well by many programs. Work is in progress to document and, if possible, fix such problems, see http://www.linuxfromscratch.org/blfs/view/svn/introduction/locale-issues.html.

UTF-8ベースのロケールは、多くのプログラムでは完全にサポートされていません。 UTF-8へ対応させる作業のドキュメント化は進行中で、http://www.linuxfromscratch.org/blfs/view/svn/introduction/locale-issues.htmlを参照し、可能であれば問題を修正してください。