7.9. Bash Shell 启动文件

shell 程序 /bin/bash (以下简称 “shell”) 使用一系列启动文件来帮助创建运行环境。每个文件都有特定的用途,并可能以不同的方式影响登录和交互式环境。 以下目录中的文件提供了全局设置。/etc目录提供了全局设置。 如果在主目录中存在等效文件,则它可能会覆盖全局设置。

交互式登录 shell 在成功登录后启动,使用 /bin/login,通过读取/etc/passwd文件。 交互式非登录 shell 在命令行启动 (例如,[prompt]$/bin/bash)。 当 shell 脚本运行时,通常会出现非交互式 shell。 它是非交互式的,因为它正在处理脚本,而不是在命令之间等待用户输入。

有关更多信息,请参阅 info bash 命令的 Bash 启动文件和交互式 Shell 部分。

文件/etc/profile~/.bash_profile当 shell 作为交互式登录 shell 调用时,会读取这些文件。

以下/etc/profile设置了一些本地语言支持所需的环境变量。 正确设置它们会带来以下结果:

此脚本还设置了INPUTRC环境变量,使 Bash 和 Readline 使用/etc/inputrc之前创建的文件。

将下面的 [ll] 替换为所需语言的双字母代码 (例如,“en”),并将 [CC] 替换为相应国家的双字母代码 (例如,“GB”)。 [charmap] 应替换为您选择的语言环境的规范字符集。

可以通过运行以下命令获取 Glibc 支持的所有语言环境的列表

locale -a

语言环境可以有许多同义词,例如 “ISO-8859-1” 也被称为 “iso8859-1” 和 “iso88591”。 某些应用程序无法正确处理各种同义词,因此最安全的选择是特定语言环境的规范名称。 要确定规范名称,请运行以下命令,其中 [locale name]locale -a 为您首选的语言环境 (在我们的示例中为 “en_GB.iso88591”) 给出的输出。

LC_ALL=[locale name] locale charmap

对于 “en_GB.iso88591” 语言环境,上述命令将打印

ISO-8859-1

这将得到最终的语言环境设置 “en_GB.ISO-8859-1”。 重要的是,在使用上述启发式方法找到语言环境后,在将其添加到 Bash 启动文件之前对其进行测试。

LC_ALL=[locale name] locale country
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

上述命令应打印国家和语言名称、语言环境使用的字符编码、当地货币以及拨打电话号码以进入该国家/地区的前缀。 如果上述任何命令失败并显示类似于下面所示的消息,则表示您的语言环境要么未在第 6 章中安装,要么不受 Glibc 默认安装的支持。

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

如果发生这种情况,您应该使用 localedef 命令安装所需的语言环境,或者考虑选择其他语言环境。 以下说明假设 Glibc 没有此类错误消息。

LFS 之外的某些软件包也可能缺乏对您选择的语言环境的支持。 一个例子是 X 库 (X Window System 的一部分),它输出以下错误消息

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

有时可以通过删除语言环境规范的字符集部分来解决此问题,只要这不会更改 Glibc 与该语言环境关联的字符映射 (可以通过在两个语言环境中运行 locale charmap 命令来检查)。 例如,必须将 "de_DE.ISO-8859-15@euro" 更改为 "de_DE@euro",才能使 Xlib 识别此语言环境。

如果语言环境名称不符合他们的期望,其他软件包也可能无法正常运行 (但可能不一定会显示任何错误消息)。 在这些情况下,调查其他 Linux 发行版如何支持您的语言环境可能会提供一些有用的信息。

一旦确定了正确的语言环境设置,创建/etc/profile文件

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

export LANG=[ll]_[CC].[charmap]
export INPUTRC=/etc/inputrc

# End /etc/profile
EOF
[Note]

注意

C” (默认) 和 “en_US” (为美国英语用户推荐的语言环境) 语言环境是不同的。

设置键盘布局、屏幕字体和与语言环境相关的环境变量是支持使用普通单字节编码和从左到右书写方向的语言环境所需的唯一国际化步骤。 更复杂的情况 (包括基于 UTF-8 的语言环境) 需要额外的步骤和额外的补丁,因为许多应用程序在这些条件下往往无法正常工作。 这些步骤和补丁不包含在 LFS 书籍中,LFS 尚不支持此类语言环境。