9.2 Bash历史内置程序
Bash提供了两个内置的命令来操作历史记录列表和历史记录文件。
fc
fc [-e ename] [-lnr] [first] [last]
fc -s [pat=rep] [command]
第一种形式是从历史列表中选择从first到last的一系列命令,并显示或编辑和重新执行它们。 first和last都可以指定为一个字符串(定位以该字符串开始的最新命令)或一个数字(历史列表中的索引,其中负数被用作当前命令编号的偏移量)。
列举时,first或last为0相当于-1,-0相当于当前命令(通常是
fc
命令);否则,0相当于-1,-0无效。如果没有指定last,它将被设置为first。如果没有指定first,则在编辑时设置为前一个命令,在列出时设置为-16。如果给了-l标志,命令会被列在标准输出上。在列出命令时,-n标志抑制了命令编号。-r标志会颠倒列表的顺序。否则,由ename给出的编辑器会在包含这些命令的文件上被调用。如果没有给出ename,则使用以下变量扩展的值。
${FCEDIT:-${EDITOR:-vi}}
.这表示使用FCEDIT
变量的值(如果设置了),或者使用EDITOR
变量的值(如果设置了),或者使用vi
(如果都没有设置)。 当编辑完成后,编辑过的命令被呼应并执行。在第二种形式中,command在所选命令中的每一个pat实例被rep替换后被重新执行。command的解释与上面的first相同。
与
fc
命令一起使用的一个有用的别名是r='fc -s'
,这样输入‘r cc’就会运行以cc
开头的最后一条命令,输入‘r’就会重新执行最后一条命令(见6.6 别名)。history
history [n] history -c history -d offset history -d start-end history [-anrw] [filename] history -ps arg
在没有选项的情况下,显示带有行号的历史列表。 以‘*’为前缀的行已被修改。 参数为n时,只列出最后的n行。 如果shell变量
HISTTIMEFORMAT
被设置且不为空,它将作为strftime的格式字符串,显示与每个显示的历史条目相关的时间戳。 在格式化的时间戳和历史行之间不打印中间的空白。选项,如果提供的话,有以下含义。
-c
清除历史列表。这可以与其他选项结合起来,完全取代历史列表。
-d offset
删除offset位置的历史条目。 如果offset是正数,应指定为显示历史时出现的位置。 如果offset是负数,它被解释为相对于比上一个历史位置大一个的位置,因此负数指数从历史的末尾算起,而‘-1’的指数是指当前
history -d
的命令。-d start-end
删除位置start和end之间的历史条目范围,包括在内。 start和end的正值和负值的解释如上所述。
-a
将新的历史行添加到历史文件中。 这些是自当前Bash会话开始以来输入的历史行,但还没有添加到历史文件中。
-n
将尚未从历史文件中读取的历史行追加到当前的历史列表中。这些是自当前Bash会话开始后追加到历史文件中的行。
-r
读取历史文件,并将其内容附加到历史列表中。
-w
写出当前的历史列表到历史文件中。
-p
对args进行历史替换,并将结果显示在标准输出上,而不将结果储存在历史列表中。
-s
args被添加到历史列表的末尾,作为一个单独的条目。
如果在使用任何-w, -r, -a, 或-n选项时提供了filename参数,Bash使用filename作为历史文件。 如果没有,则使用
HISTFILE
变量的值。返回值是0,除非遇到一个无效的选项,在读或写历史文件时发生错误,提供一个无效的offset或范围作为-d的参数,或提供历史扩展作为-p的参数失败。