9.2 Bash历史内置程序

评论 0 浏览 0 2023-01-26

Bash提供了两个内置的命令来操作历史记录列表和历史记录文件。

fc
fc [-e ename] [-lnr] [first] [last]
fc -s [pat=rep] [command]

第一种形式是从历史列表中选择从firstlast的一系列命令,并显示或编辑和重新执行它们。 firstlast都可以指定为一个字符串(定位以该字符串开始的最新命令)或一个数字(历史列表中的索引,其中负数被用作当前命令编号的偏移量)。

列举时,firstlast为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

删除位置startend之间的历史条目范围,包括在内。 startend的正值和负值的解释如上所述。

-a

将新的历史行添加到历史文件中。 这些是自当前Bash会话开始以来输入的历史行,但还没有添加到历史文件中。

-n

将尚未从历史文件中读取的历史行追加到当前的历史列表中。这些是自当前Bash会话开始后追加到历史文件中的行。

-r

读取历史文件,并将其内容附加到历史列表中。

-w

写出当前的历史列表到历史文件中。

-p

args进行历史替换,并将结果显示在标准输出上,而不将结果储存在历史列表中。

-s

args被添加到历史列表的末尾,作为一个单独的条目。

如果在使用任何-w, -r, -a, 或-n选项时提供了filename参数,Bash使用filename作为历史文件。 如果没有,则使用HISTFILE变量的值。

返回值是0,除非遇到一个无效的选项,在读或写历史文件时发生错误,提供一个无效的offset或范围作为-d的参数,或提供历史扩展作为-p的参数失败。

最后更新2023-03-16
0 个评论
上一篇: 9.1 Bash 历史工具
下一篇: 9.3 历史扩展
当前页面书签