「BASH」- Bourne-Again SHell

认识

官网:https://www.gnu.org/software/bash/
文档:https://www.gnu.org/savannah-checkouts/gnu/bash/manual/bash.html
仓库:https://savannah.gnu.org/projects/bash/

Bash 是个 sh 兼容的命令语言解释器,执行标准输入或文件中的命令。Bash 还包含了 ksh 和 csh 的有用功能。Bash 最终旨在成为 IEEE Standard 1003.2 的一致性实现。

组成

Bash Startup Files

参考 https://www.gnu.org/software/bash/manual/html_node/Bash-Startup-Files.html 文档

针对 Interactive Non-Login Shell 启动,在 GNOME Terminal 中,我们创建新的窗口,其以该方式运行。该时 bash 仅加载 ~/.bashrc 文件。

安装的可执行命令

# apt-file list bash

  • bash,主程序文件,交互的 SHELL。
  • rbash,执行 bash 的快捷方式。存在于发行版的 bash 中。
  • bashbug,用于 bug 反馈。
  • clear_console,用于清除控制台。

性质

语法格式

WIP

Programmable Completion

Programmable Completion 是 Bash shell 的一个强大功能,它允许用户在输入命令时通过按 Tab 键自动补全命令、文件名、变量名、用户名、主机名等。

注意,默认的自动补全仅能进行简单的自动补全,比如文件目录路径。但称为“Programmable”的原因是其允许扩展 Bash 的自动补全功能,它能满足我们的跟多需要。

构造

针对用户,我们按照文档进行安装即可| https://www.gnu.org/savannah-checkouts/gnu/bash/manual/bash.html#Installing-Bash

从发行版的源中安装

# Kali GNU/Linux Rolling
apt-get install bash

使用源码编译安装 BASH | 在 Linux 下

各个发行版中已经预装了 bash,如果想手动体验一把 bash 的编译,参考:
LFS/Bash-4.3.30: http://www.linuxfromscratch.org/lfs/view/7.10/chapter06/bash.html

BASH 主页: https://www.gnu.org/software/bash/
下载 BASH 并进入源码目录;

准备 BASH,然后进行编译:

#!/bin/bash

# 准备
./configure --prefix=/usr                       \
            --docdir=/usr/share/doc/bash-4.3.30 \
            --without-bash-malloc               \
            --with-installed-readline

# The meaning of the new configure option:
#
# --with-installed-readline
# This option tells Bash to use the readline library that is already installed on the system rather than using its own readline version.

# 进行编译
make

# 安装
make install
mv -vf /usr/bin/bash /bin

应用

忽略重复的历史命令

How do I prevent commands from showing up in Bash history? – Stack Overflow

在执行命令的过程中,我们通常会使用 [↑] 来选择我们执行过的命令。但是当执行多次后,我们想找到更久之前的命令,就需要通过 [↑] 来翻过很多重复命令;

通过 export HISTCONTROL=ignoredups 变量,能够控制 Bash History 忽略重复命令;

查找定义某个函数的文件

DeepSeek / 在 bash 中,如何找到定义函数的脚本文件?

shopt -s extdebug
declare -F function_name
shopt -u extdebug # 完成后关闭

参考

Bash (Unix shell) – Wikipedia