3.1 设置历史变量
无论是 bash 还是 zsh,都能够将我们已经执行过的命令存储到一个文件中。这样,便于我们以后对其加以重复使用。要查看 bash 或 zsh 的历史文件位置,不妨执行:
在 bash 中,我们可以看到,这个文件默认是存储到 ~/.bash_history
的。但是,因为 zsh 默认并没有设置该变量,所以内容为空。
通过向 $HISTFILE
变量赋予新值,从而能够更改历史文件的保存位置。下面,我们将 zsh 的历史文件设置为 ~/.zsh_history
。先使用文本编辑器(比如 nvim
)打开 ~/.zshrc
,然后添加下行内容:
对 bash 而言,另外两个重要的历史变量是 $HISTFILESIZE
和 $HISTSIZE
。其中,前者为 $HISTFILE
文件所能保存的最大行数,而后者则为 Shell 中记忆的最大历史命令数。这两个变量默认的设置都是 500,换句话说 ~/.bash_history
文件最多保留 500 行,且最多 500 个命令。为了最大限度的利用历史文件的价值,我们不妨考虑把这两个变量的值设得更大一些,比如 5000:
将以上两行内容追加到 ~/.bashrc
中以便永久保存设置。通常将这两个变量设置的值保持一致,否则在 $HISTFILE
中保存的内容可能会被截断。比如,在 $HISTSIZE
设为 1000 的情况下,而 $HISTFILESIZE
却为 500。因为历史命令数大于文件的行数,所以有部分历史命令不能保存到历史文件中。
$HISTSIZE
变量在 zsh 中同样有效,但与 $HISTFILESIZE
变量等价的却变成了 $SAVEHIST
。类似的,我们将 ~/.zsh_history
保留的最大行数和命令数也设为 5000:
把上面两行内容添加到 ~/.zshrc
中以便永久保存设置。
既然存储的这些历史命令如此重要,那么就很有必要维护一个整洁、有价值的命令清单了。比如,剔除掉那些重复的命令、开头包含空格的命令、以及常用的简单命令等等。要实现这个目的,在 bash 中我们可以使用 $HISTCONTROL
变量。
$HISTCONTROL
采用冒号分隔的列表来决定是否将命令保存到历史文件中。例如,erasedups
表示去掉重复的命令,而 ignorespace
则意为除去开头具有空格的命令。
在 zsh 中没有与 bash 对应的内置变量 $HISTCONTROL
,不过可以通过设置选项来达到同样的效果: