第十部分 安装Bash(Installing Bash)

本章提供在各种支持的平台上安装 Bash 的基本说明。该发行版支持 GNU 操作系统、几乎每个版本的 Unix 以及一些非 Unix 系统,例如 BeOS 和 Interix。MS-DOS、OS/2 和 Windows 平台还存在其他独立端口。

源码安装 Basic Installation

这些是 Bash 的安装说明。

编译 Bash 最简单的方法是:

1、 cd 到包含源代码的目录并输入 ‘./configure’ 为您的系统配置 Bash 。如果您在旧版本的 System V 上使用 csh ,您可能需要键入 ‘sh ./configure’ 而是阻止 csh 尝试执行 configure 本身。
运行 configure 需要一些时间。运行时,它会打印消息,告知它正在检查哪些功能。

2、使用 ‘make’ 编译 Bash 并构建 bashbug 错误报告脚本。
3、或者,输入 ‘make tests’ 运行 Bash 测试套件。
4、使用 ‘make install’ 安装 bash 和 bashbug 。这还将安装手册页和信息文件、消息翻译文件、一些补充文档、许多可加载内置命令示例以及一组用于开发可加载内置命令的头文件。您可能需要额外的权限才能将 bash 安装到所需的目的地,因此 ‘须藤进行安装’ 可能需要。有关控制 bash 和其他文件安装位置的更多信息如下(请参阅 Installation Names )。

configure shell 脚本尝试猜测编译期间使用的各种与系统相关的变量的正确值。它使用每个目录下(顶层目录下的目录lib,builtins,doc,po, 和support以及其他几个目录)的软件包这些值来创建Makefile。它还创建了一个config.h包含系统相关定义的文件。最后,它创建一个名为 config.status 的 shell 脚本,您可以在将来运行该脚本来重新创建当前配置(一个文件)config.cache保存测试结果以加速重新配置,以及一个包含编译器输出(主要用于调试 configure )的文件config.log。如果在某个时刻config.cache包含您不想保留的结果,您可以删除或编辑它。

要了解有关 configure 脚本可以理解的选项和参数的更多信息,请在 Bash 源目录中的 Bash 提示符下键入

bash-4.2$ ./configure –help

如果您想在与源目录分开的目录中构建 Bash (例如,为多个架构构建),只需使用配置脚本的完整路径即可。以下命令将从源代码中bash/usr/local/build目录构建安装程序到指定目录/usr/local/src/bash-4.4
mkdir /usr/local/build/bash-4.4
cd /usr/local/build/bash-4.4
bash /usr/local/src/bash-4.4/configure
make
有关在与源分开的目录中构建的更多信息,请参阅 Compiling For Multiple Architectures 。

如果您需要编译 Bash做一些特殊的定制,请尝试弄清楚 configure 如何检查是否执行这些操作,并将差异或说明邮寄给 bash-maintainers@gnu.org ,以便在下一个版本中考虑它们.

编译器和选项

某些系统需要 configure 脚本不知道的异常编译或链接选项。您可以通过在环境中设置变量来为 configure 提供变量初始值。使用 Bourne 兼容的 shell,您可以在命令行上执行此操作,如下所示:

CC=c89 CFLAGS=-O2 LIBS=-lposix ./configure

在具有 env 程序的系统上,您可以这样做:
env CPPFLAGS=-I/usr/local/include LDFLAGS=-s ./configure

配置过程使用 GCC 来构建 Bash (如果可用)。

针对多种架构进行编译

通过将每种体系结构的目标文件放在各自的目录中,您可以同时为多种计算机编译 Bash 。为此,您必须使用支持 VPATH 变量的 make 版本,例如 GNU make 。 cd 到您想要目标文件和可执行文件所在的目录,并从源目录运行 configure 脚本(请参阅 Basic Installation )。您可能需要提供–srcdir=PATH告诉 configure 源文件在哪里的参数。 configure 自动检查 configure 所在目录和“…”中的源代码。

如果您必须使用不支持 VPATH 变量的 make ,您可以在源代码目录中一次为一种架构编译 Bash 。在为一种架构安装 Bash 后,请使用 ‘make distclean’ 在重新配置另一个架构之前。

或者,如果您的系统支持符号链接,您可以使用support/mkclone用于创建构建树的脚本,该构建树具有返回源目录中每个文件的符号链接。这是一个从源目录在当前目录中创建构建目录的示例/usr/gnu/src/bash-2.0:

bash /usr/gnu/src/bash-2.0/support/mkclone -s /usr/gnu/src/bash-2.0 .
mkclone 脚本需要 Bash ,因此您必须已经为至少一种架构构建了 Bash ,然后才能为其他架构创建构建目录。

Installation Names 安装位置

默认情况下, ‘make install’ 将安装到/usr/local/bin,/usr/local/man, 即安装前缀默认为/usr/local。您可以通过给configure使用选项–prefix=PATH指定除/usr/local之外的其它安装前缀,或通过指定 ‘make install’ 运行时 ‘make’ 变量 prefix 的值(例如,‘使安装前缀= PATH’)。 prefix 变量为安装 bash 时使用的 exec_prefix 和其他变量提供默认值。

您可以为特定于体系结构的文件和独立于体系结构的文件指定单独的安装前缀。如果你给 configure 使用选项–exec-prefix=PATH, ‘make install’ 将使用 PATH 作为安装程序和库的前缀。文档和其他数据文件仍将使用常规前缀。

如果您想更改单次运行的安装位置,您可以将这些变量指定为 make 的参数:
‘make install exec_prefix=/’ 将安装 bash 和 bashbug到/bin,而不是默认的/usr/local/bin.

如果您想在不更改系统上任何内容的情况下查看 bash 将安装的文件以及安装位置,请将变量 DESTDIR 指定为 make 的参数。它的值应该是您想要安装的不同根开始的绝对目录路径。例如,

mkdir /fs1/bash-install
make install DESTDIR=/fs1/bash-install
将安装 bash 到/fs1/bash-install/usr/local/bin/bash,将文档放入目录中/fs1/bash-install/usr/local/share,将内置命令安装到/fs1/bash-install/usr/local/lib/bash,等等。您可以使用常用的 exec_prefix 和 prefix 变量来更改 DESTDIR 值下的目录路径。

GNU Makefile 标准提供了这些变量及其影响的更完整的描述。

指定系统类型

可能有些功能 configure 无法自动识别,需要通过 Bash 运行的主机类型来确定。通常 configure 可以弄清楚这一点,但如果它打印一条消息说它无法猜测主机类型,请给它–host=TYPEoption. ‘TYPE’ 可以是系统类型的简称,例如 ‘sun4’,或具有三个字段的规范名称:‘CPU-COMPANY-SYSTEM’(例如,’i386-unknown-freebsd4.2’).

查看文件support/config.sub每个字段的可能值。
Sharing Defaults 共享默认配置
如果要为 configure 脚本设置默认值以进行共享,您可以创建一个名为 config.site 的shell 配置脚本,该脚本为 CC 、cache_file 和 prefix 等变量提供默认值。如果“PREFIX/share/config.site”文件存在的话“configure”会查找它。之后查找“PREFIX/etc/config.site”,或者您可以将 CONFIG_SITE 环境变量设置为配置脚本的位置。
警告: Bash configure 会查找配置脚本,但并非所有 configure 脚本都会查找。
Operation Controls 控制选项
configure 可识别以下选项来控制其运行方式。

–cache-file=file
使用并保存 file 中的测试结果,而不是./config.cache。将 file 设置为/dev/null禁用缓存,用于调试 configure 。

–help
将configure选项摘要打印并退出。

–quiet
–silent
-q
不要打印说明正在进行哪些检查的消息。

–srcdir=dir
在目录 dir 中查找 Bash 源代码。通常 configure 可以自动确定该目录。

–version
打印用于生成 configure 脚本的 Autoconf 版本,然后退出。

configure 还接受一些其他未广泛使用的样板选项。‘configure –help’ 打印完整列表。

Optional Features

Bash configure 有许多–enable-featureoptions,其中 feature 表示 Bash 的可选部分。还有几个–with-package选项,其中 package 类似于 ‘bash-malloc’ 或者 ‘purify’。要关闭包的默认功能,请使用–without-package。要配置 Bash 而不使用默认启用的功能,请使用–disable-feature.

这是Bash configure 识别的选项–enable- 和–with- 完整的列表。

–with-afs
定义您是否使用 Transarc 的 Andrew 文件系统。

–with-bash-malloc
使用目录下的 Bash 版本的 malloclib/malloc 。这与 GNU libc 中出现的 malloc 不同,而是最初源自 4.2 BSD malloc 的旧版本。这个 malloc 非常快,但是每次分配都会浪费一些空间。默认情况下启用此选项。这NOTES文件包含应关闭此选项的系统列表, configure 会自动为许多系统禁用此选项。

–with-curses
使用curses library 而不是termcap library 。如果您的系统的 termcap 数据库不充分或不完整,则应提供此信息。

–with-gnu-malloc
–with-bash-malloc 的同义词。

–with-installed-readline[=PREFIX]
定义此选项以使 Bash 与本地安装的 Readline 版本而不是中的版本链接lib/readline。这仅适用于 Readline 5.0 及更高版本。如果 PREFIX 是 yes 或未提供,则 configure 使用 make 变量 includedir 和 libdir (默认情况下是 prefix 的子目录)的值来查找已安装的 Readline 版本(如果它不在标准系统 include 和 library 目录中)。如果 PREFIX 是 no ,则 Bash 与中的版本链接lib/readline。如果 PREFIX 设置为任何其他值, configure 会将其视为目录路径名,并在该目录的子目录中查找已安装的 Readline 版本(包括 PREFIX / include 中的文件和 PREFIX / lib 中的 library )。

–with-libintl-prefix[=PREFIX]
定义此选项以使 Bash 与本地安装的 libintl library 版本链接,而不是链接到 libintl library 中的版本lib/intl.

–with-libiconv-prefix[=PREFIX]
定义此选项以使 Bash 在 PREFIX 而不是标准系统位置中查找 libiconv。 Bash 不包含任何版本。

–enable-minimal-config
这会产生一个具有最少功能的 shell,接近历史上的 Bourne shell。

有几个–enable-更改 Bash 编译、链接和安装方式的选项,而不是更改运行时功能。

–enable-largefile
如果操作系统需要特殊的编译器选项来构建可以访问大文件的程序,请启用对 large files 的支持。如果操作系统提供大文件支持,则默认启用此功能。

–enable-profiling
这会构建一个 Bash 二进制文件,该二进制文件会在每次执行时生成供 gprof 处理的分析信息。

–enable-separate-helpfiles
使用外部文件作为 help 内置显示的文档,而不是在内部存储文本。

–enable-static-link
如果正在使用 gcc ,这会导致 Bash 静态链接。这可以用来构建一个版本作为 root 的 shell。

The ‘minimal-config’ 选项可用于禁用以下所有选项,但它会首先被处理,因此可以使用 ’ 启用单个选项enable-feature’.

以下所有选项,除了 ‘alt-array-implementation’, ‘disabled-builtins’, ‘direxpand-default’, ‘strict-posix-default’, 和 ‘xpg-echo-default’ 默认情况下启用,除非操作系统不提供必要的支持。

–enable-alias
允许别名扩展并包含 alias 和 unalias 内置函数(请参阅 Aliases )。

–enable-alt-array-implementation
这使用数组的替代实现(请参阅 Arrays )构建 bash ,该数组提供更快的访问速度,但代价是使用更多内存(有时更多倍,具体取决于数组的稀疏程度)。

–enable-arith-for-command
包括对 for 命令的替代形式的支持,其行为类似于 C 语言 for 语句(请参阅 Looping Constructs )。

–enable-array-variables
包括对一维数组 shell 变量的支持(请参阅 Arrays )。

–enable-bang-history
包括对类似 csh 历史替换的支持(请参阅 History Expansion )。

–enable-brace-expansion
包括类似 csh 的支撑扩展( b{a,b}c → bac bbc )。有关完整说明,请参阅 Brace Expansion 。

–enable-casemod-attributes
在 declare 内置和赋值语句中包括对大小写修改属性的支持。例如,具有 uppercase 属性的变量在赋值时会将其值转换为大写。

–enable-casemod-expansion
包括对大小写修改的单词扩展的支持。

–enable-command-timing
包括支持将 time 识别为保留字以及显示 time 之后的管道的时序统计信息(请参阅 Pipelines )。这允许对管道以及 shell 内置函数和函数进行计时。

–enable-cond-command
包括对 [[ 条件命令的支持。(参见 Conditional Constructs )。

–enable-cond-regexp
包括对使用 ’ 匹配 POSIX 正则表达式的支持=~’ [[ 条件命令中的二元运算符。(参见 Conditional Constructs )。

–enable-coprocesses
包括对协进程和 coproc 保留字的支持(请参阅 Pipelines )。

–enable-debugger
包括对 bash 调试器(单独分发)的支持。

–enable-dev-fd-stat-broken
如果在 /dev/fd/ N 上调用 stat 返回的结果与在文件描述符 N 上调用 fstat 返回的结果不同,请提供此选项以启用解决方法。这对于测试文件属性的条件命令有影响。

–enable-direxpand-default
导致 shell 启动时默认启用 direxpand shell 选项(请参阅 The Shopt Builtin )。通常默认情况下它是禁用的。

–enable-directory-stack
包括对类似 csh 的目录堆栈以及 pushd 、 popd 和 dirs 内置函数的支持(请参阅 The Directory Stack )。

–enable-disabled-builtins
允许通过 ’ 调用内置命令builtin xxx’即使在使用 ’ 禁用 xxx 后启用-n xxx’。有关 builtin 和 enable 内置命令的详细信息,请参阅 Bash Builtin Commands 。

–enable-dparen-arithmetic
包括对 ((…)) 命令的支持(请参阅 Conditional Constructs )。

–enable-extended-glob
包括对上面 Pattern Matching 中描述的扩展模式匹配功能的支持。

–enable-extended-glob-default
将上述 The Shopt Builtin 下的 extglob shell 选项的默认值设置为启用。

–enable-function-import
包括对导入由 shell 的另一个实例从环境中导出的函数定义的支持。默认情况下启用此选项。

–enable-glob-asciirange-default
将上述 The Shopt Builtin 下的 globasciiranges shell 选项的默认值设置为启用。这控制在模式匹配括号表达式中使用时字符范围的行为。

–enable-help-builtin
包括 help 内置函数,它显示有关 shell 内置函数和变量的帮助(请参阅 Bash Builtin Commands )。

–enable-history
包括命令历史记录以及 fc 和 history 内置命令(请参阅 Bash History Facilities )。

–enable-job-control
这将启用作业控制功能(请参阅 Job Control )(如果操作系统支持)。

–enable-multibyte
如果操作系统提供必要的支持,这将启用对多字节字符的支持。

–enable-net-redirections
这使得在重定向中使用时能够对 /dev/tcp/host/port 和 /dev/udp/host/port 形式的文件名进行特殊处理(请参阅 Redirections )。

–enable-process-substitution
如果操作系统提供必要的支持,这将启用进程替换(请参阅 Process Substitution )。

–enable-progcomp
启用可编程完成设施(请参阅 Programmable Completion )。如果未启用 Readline,则此选项无效。

–enable-prompt-string-decoding
打开 $PS0 、 $PS1 、 $PS2 和 $PS4 提示字符串中的多个反斜杠转义字符的解释。有关提示字符串转义序列的完整列表,请参阅 Controlling the Prompt 。

–enable-readline
Readline library 的 Bash 版本支持命令行编辑和历史记录(请参阅 Command Line Editing )。

–enable-restricted
包括对受限 shell 的支持。如果启用此功能,Bash 在被称为 rbash 时会进入受限模式。有关受限模式的说明,请参阅 The Restricted Shell 。

–enable-select
包括 select 复合命令,它允许生成简单菜单(请参阅 Conditional Constructs )。

–enable-single-help-strings
将 help 内置显示的文本存储为每个帮助主题的单个字符串。这有助于将文本翻译成不同的语言。如果您的编译器无法处理很长的字符串文字,您可能需要禁用此功能。

–enable-strict-posix-default
默认情况下使 Bash 符合 POSIX 标准(请参阅 Bash POSIX Mode )。

–enable-translatable-strings
启用对 $“string” 可翻译字符串的支持(请参阅 Locale-Specific Translation )。

–enable-usg-echo-default
–enable-xpg-echo-default 的同义词。

–enable-xpg-echo-default
使 echo 默认内置扩展反斜杠转义字符,无需-e选项。这将 xpg_echo shell 选项的默认值设置为 on ,这使得 Bash echo 的行为更像单一 Unix 规范版本 3 中指定的版本。有关 echo 识别的转义序列的说明,请参阅 Bash Builtin Commands 。

The fileconfig-top.h包含 C 预处理器 ‘#define’ 不可从 configure 设置的选项的语句。其中一些是不应该改变的;如果这样做,请注意后果。阅读与每个定义相关的注释,了解有关其效果的更多信息。

安装过程记录(bash 5.2)

目标系统windows wls子系统ubuntun 20.04.6 LTS

安装前bash信息
$ bash -version
GNU bash,版本 5.0.17(1)-release (x86_64-pc-linux-gnu)
Copyright © 2019 Free Software Foundation, Inc.
许可证 GPLv3+: GNU GPL 许可证第三版或者更新版本 http://gnu.org/licenses/gpl.html

本软件是自由软件,您可以自由地更改和重新发布。
在法律许可的情况下特此明示,本软件不提供任何担保。

1、下载源码
$ wget https://ftp.gnu.org/gnu/bash/bash-5.2.15.tar.gz

2、安装命令
$ tar xvf bash-5.2.15.tar.gz
$ cd bash-5.2.15/
$ sudo bash ./configure
$ make
$ sudo make install

3、安装后版本
$ bash -version
GNU bash,版本 5.2.15(2)-release (x86_64-pc-linux-gnu)
Copyright © 2022 自由软件基金会
许可证 GPLv3+:GNU GPL 许可证第三版或者更新版本 http://gnu.org/licenses/gpl.html

本软件是自由软件,您可以自由地更改和重新发布。
在法律许可的情况下特此明示,本软件不提供任何担保。