123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223 |
- <?xml version="1.0" encoding="UTF-8"?>
- <!DOCTYPE sect1 PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
- "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [
- <!ENTITY % general-entities SYSTEM "../general.ent">
- %general-entities;
- ]>
- <sect1 id="ch-scripts-profile" revision="sysv">
- <?dbhtml filename="profile.html"?>
- <title>Bash Shell 启动文件</title>
- <indexterm zone="ch-scripts-profile">
- <primary sortas="e-/etc/profile">/etc/profile</primary>
- </indexterm>
- <!--para>The shell program <command>/bin/bash</command> (hereafter referred to
- as <quote>the shell</quote>) 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 <filename
- class="directory">/etc</filename> directory provide global settings. If an
- equivalent file exists in the home directory, it may override the global
- settings.</para-->
- <para>Shell 程序 <command>/bin/bash</command> (之后简称 shell)
- 使用一组启动文件,以帮助创建运行环境。每个文件都有专门的用途,
- 可能以不同方式影响登录和交互环境。
- <filename class="directory">/etc</filename> 目录中的文件提供全局设定,
- 如果在用户主目录中有对应的文件存在,它可能覆盖全局设定。</para>
- <!--para>An interactive login shell is started after a successful login, using
- <command>/bin/login</command>, by reading the <filename>/etc/passwd</filename>
- file. An interactive non-login shell is started at the command-line (e.g.,
- <prompt>[prompt]$</prompt><command>/bin/bash</command>). 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.</para-->
- <para>在使用 <command>/bin/login</command> 成功登录后,
- 它读取 <filename>/etc/passwd</filename> 中的 shell 命令行,
- 启动一个交互式登录 shell。通过命令行(如
- <prompt>[prompt]$</prompt><command>/bin/bash</command>)
- 可以启动一个交互式非登录 shell。非交互 shell 通常在 shell 脚本运行时存在,
- 它处理脚本,在执行命令时不需要等待用户输入,因此是非交互的。</para>
- <!--para>For more information, see <command>info bash</command> under the
- <emphasis>Bash Startup Files and Interactive Shells</emphasis> section.</para-->
- <para>阅读 <command>info bash</command> 中
- <emphasis>Bash Startup Files and Interactive Shells</emphasis> 一节,
- 了解更多信息。</para>
- <!--para>The files <filename>/etc/profile</filename> and
- <filename>~/.bash_profile</filename> are read when the shell is
- invoked as an interactive login shell.</para-->
- <para>文件 <filename>/etc/profile</filename> 和
- <filename>~/.bash_profile</filename> 在 shell 作为交互登录 shell
- 时被读取。</para>
- <!--para>The base <filename>/etc/profile</filename> below sets some
- environment variables necessary for native language support. Setting
- them properly results in:</para-->
- <para>下面给出的基本 <filename>/etc/profile</filename>
- 设定本地语言支持需要的环境变量,正确设定它们有以下好处:</para>
- <itemizedlist>
- <listitem>
- <para>程序输出被翻译成本地语言</para>
- </listitem>
- <listitem>
- <para>字符被正确分类为字母、数字和其他类别,
- 这对于使 <command>bash</command> 正确接受命令行中的非 ASCII
- 本地字符来说是必要的</para>
- </listitem>
- <listitem>
- <para>根据所在地区惯例排序字母</para>
- </listitem>
- <listitem>
- <para>适用于所在地区的默认纸张尺寸</para>
- </listitem>
- <listitem>
- <para>正确格式化货币、时间和日期值</para>
- </listitem>
- </itemizedlist>
- <note><title>译注</title>
- <para>译者强烈反对在 <filename>/etc/profile</filename>
- 中指定中文 locale。由于字符终端的局限性,它根本无法显示中文字符。
- 使用中文 locale 将导致许多程序输出中文消息,
- 结果在字符终端中都显示为问号。建议在
- <filename>/etc/locale.conf</filename> 中指定英文 locale ,
- 在 BLFS 中安装了图形环境后再将
- <literal>LANG=zh_CN.UTF-8</literal> 写入
- <filename>.xprofile</filename> 等图形界面配置文件,
- 这样即可在字符终端中使用英文 locale ,而在图形界面中使用中文。
- </para>
- </note>
- <para>将下面的 <replaceable><ll></replaceable>
- 替换为所需语言的双字符代号(例如 <quote>en</quote>),
- <replaceable><CC></replaceable> 替换为国家或地区的双字符代号
- (例如 <quote>GB</quote>),
- <replaceable><charmap></replaceable> 替换为您选定的 locale
- 的标准字符映射。另外,还可以加入 <quote>@euro</quote>
- 之类的可选修饰符。</para>
- <para>Glibc 支持的所有 locale 可以用以下命令列出:</para>
- <screen role="nodump"><userinput>locale -a</userinput></screen>
- <para>字符映射可能有多个别名,例如 <quote>ISO-8859-1</quote>
- 也可以称为 <quote>iso8859-1</quote> 和 <quote>iso88591</quote>。
- 某些程序不能正确处理一些别名(例如,只识别 <quote>UTF-8</quote>,
- 不能识别 <quote>utf8</quote>),因此在多数情况下,为了保险起见,
- 最好使用 locale 的规范名称。为了确定规范名称,执行以下命令,
- 将 <replaceable><locale name></replaceable> 替换成
- <command>locale -a</command> 对于您希望的 locale 的输出
- (以 <quote>en_GB.iso88591</quote> 为例)。</para>
- <screen role="nodump"><userinput>LC_ALL=<replaceable><locale name></replaceable> locale charmap</userinput></screen>
- <para>对于 <quote>en_GB.iso88591</quote> locale,以上命令输出:</para>
- <screen><computeroutput>ISO-8859-1</computeroutput></screen>
- <para>这样就最终确定 locale 应设置为 <quote>en_GB.ISO-8859-1</quote>。
- 在将以上启发方法获得的 locale 添加到 Bash 启动文件之前,
- 一定要进行下列测试:</para>
- <screen role="nodump"><userinput>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</userinput></screen>
- <!--para>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.</para-->
- <para>以上命令应该输出语言名称、选定 locale 使用的字符编码、
- 本地货币符号以及所在国家或地区的国际电话区号。
- 如果以上某个命令失败并输出类似下面这样的消息,
- 意味着您的 locale 在第 6 章中没有安装,或者不被 Glibc 的默认安装支持。
- </para>
- <screen><computeroutput>locale: Cannot set LC_* to default locale: No such file or directory</computeroutput></screen>
- <!--para>If this happens, you should either install the desired locale using the
- <command>localedef</command> command, or consider choosing a different locale.
- Further instructions assume that there are no such error messages from
- Glibc.</para-->
- <para>如果出现了这种消息,您应该用 <command>localedef</command>
- 命令安装所需的 locale ,或重新选择一个不同的 locale 。
- 后文假设 Glibc 没有输出类似错误消息。</para>
- <!-- FIXME: the xlib example will became obsolete real soon -->
- <!--para>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:</para-->
- <para>某些 LFS 以外的软件包可能缺乏对您选择的 locale 的支持,
- 例如 X 库(X 窗口系统的一部分),它在您的 locale
- 与它内部文件中的字符映射表名不完全匹配时,会输出以下错误消息:</para>
- <screen><computeroutput>Warning: locale not supported by Xlib, locale set to C</computeroutput></screen>
- <!--para>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 <command>locale charmap</command> 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.</para-->
- <para>某些情况下 Xlib 期望字符映射以带有规范连字符的大写形式给出,
- 例如应该使用 <quote>ISO-8859-1</quote> 而不是
- <quote>iso88591</quote>。
- 有时也可以通过去除 locale 规范中的字符映射部分找到合适的规范,
- 可以通过运行 <command>locale charmap</command> 确认。
- 例如,您需要将 <quote>de_DE.ISO-8859-15@euro</quote>
- 替换成 <quote>de_DE@euro</quote>,以获得 Xlib 能够识别的 locale。
- </para>
- <!--para>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.</para-->
- <para>其他软件包在 locale 名不符合它们的期望时可能工作不正常
- (但未必输出错误消息)。在这种情况下,探索一下其他 Linux
- 发行版是如何支持您的 locale 的,可以得到一些有用的信息。</para>
- <para>在确定了正确的 locale 设置后,创建
- <filename>/etc/profile</filename> 文件:</para>
- <screen><userinput>cat > /etc/profile << "EOF"
- <literal># Begin /etc/profile
- export LANG=<replaceable><ll>_<CC>.<charmap><@modifiers></replaceable>
- # End /etc/profile</literal>
- EOF</userinput></screen>
- <!--para>The <quote>C</quote> (default) and <quote>en_US</quote> (the recommended
- one for United States English users) locales are different. <quote>C</quote>
- 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 <command>ls</command> 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 <quote>unknown
- 8-bit</quote>). So you can use the <quote>C</quote> locale only if you are sure that
- you will never need 8-bit characters.</para-->
- <para><quote>C</quote> (默认 locale)和 <quote>en_US</quote>
- (推荐美式英语用户使用的 locale)是不同的。
- <quote>C</quote> locale 使用 US-ASCII 7 位字符集,并且将最高位为 1
- 的字节视为无效字符。因此,<command>ls</command>
- 等命令会将它们替换为问号。另外,如果试图用 Mutt 或 Pine
- 发送包含这些字符的邮件,会发出不符合 RFC 标准的消息
- (发出邮件的字符集会被标为 <quote>未知 8 位</quote>)。
- 因此,您只能在确信自己永远不会使用 8 位字符时才能使用
- <quote>C</quote> locale。</para>
- <para>许多程序不能很好地支持基于 UTF-8 的 locale,
- 我们正在努力记录并(如果可能的话)修复它们,参阅
- <ulink url="&blfs-book;introduction/locale-issues.html"/>。</para>
- </sect1>
|