历史(HISTORY)
当启用内建命令 set 的 -o history 选项时,shell 允许访问 command history,以前输入的命令的列表。 HISTSIZE 的值用作命令列表中保存的命令数量。 过去 HISTSIZE 个 (默认为500) 命令将被保存。shell 将每条命令在进行参数和变量扩展之前 保存到历史列表中 (参见上面的 EXPANSION 段落),但是是在历史扩展进行之后,并且要经过 shell 变量 HISTIGNORE 和 HISTCONTROL 处理。
在启动时,历史根据以变量 HISTFILE 的值为名的文件 (默认是 ~/.bash_history) 进行初始化。 如果需要的话,以 HISTFILE 为名的文件将被截断,来包含不超过变量 HISTFILESIZE 的值指定的行数。当交互 shell 退出时,最后 $HISTSIZE 行被从历史列表中复制到 $HISTFILE 文件中。如果启用了 shell 选项 histappend (参见下面的 shell 内建命令(SHELL BUILTIN COMMANDS) 章节中对内建命令 shopt 的描述),这些行被追加到历史文件中,否则历史文件被覆盖。如果 HISTFILE 被取消定义,或者如果历史文件不可写,历史将不会保存。保存历史之后, 历史文件被截断,以包含不超过 HISTFILESIZE 行。如果 HISTFILESIZE 被取消定义,不会进行截断操作。
内建命令 fc (参见下面的 shell 内建命令(SHELL BUILTIN COMMANDS) 章节) 可以用来列出或修改并重新执行历史列表中的一部分。内建命令 history 可以用来显示或修改历史列表,操作历史文件。当使用命令行编辑时,每种 编辑模式都有搜索命令,提供对历史列表的访问。
shell 允许控制哪些命令被保存到历史列表中。可以设置 HISTCONTROL 和 HISTIGNORE 变量,来使得 shell 只保存输入命令的一个子集。shell 选项 cmdhist 如果被启用,将使得 shell 将多行的命令的每一行保存到同一个历史条目中, 在需要的地方添加分号来保证语义的正确性。shell 选项 lithist 使得 shell 保存命令时,保留嵌入的新行而不是用分号代替。参见下面 shell 内建命令(SHELL BUILTIN COMMANDS) 中,内建命令 shopt 的描述,有关设置和取消 shell 选项的信息。