Bash的历史命令在其提供的功能数量上超过了所有其他Linuxshell历史界面。Bash有着悠久的历史。也就是说,它是一个古老的shell,并且是更古老的shell(Bourneshell)的前身,但它还有一个很棒的历史命令,它提供的功能比任何其他shell的历史界面都多。Bash版本的history可以进行反向搜索、快速调用、重写历史记录等。history命令与许多其他命令不同。您可能习惯于将命令作为可执行文件放在常见的系统级位置,例如/usr/bin、/usr/local/bin或~/bin。内置history命令不在您的PATH中并且没有物理位置:$whichhistoryWhich:[PATH]中没有历史相反,history是shell本身的内置函数:$typehistoryhistory是shellbuiltin$helphistoryhistory:history[-c][-doffset][n]orhistory-anrw[filename]orhistory-psarg[arg...]显示或操作历史列表。[...]由于这个原因,每个shell中的历史功能都是唯一的,因此您在Bash中使用的功能可能无法在Tcsh或Fish或Dash中使用,并且您在这些shell中使用的功能也可能无法在Bash中使用。在某些情况下,知道Bash可以做什么可能会激发其他shell的用户创建有趣的修改来复制Bash行为,并且它可能会解锁您以前不知道的Bash功能。查看你的Bash历史history命令最基本和最频繁的使用是查看shell会话的历史:$echo"hello"hello$echo"world"world$history1echo"hello"2echo"world"3history事件指示事件设计师事件设计师按事件搜索您的历史记录。这里,“事件”是指记录在历史记录中的命令,以换行符分隔。换句话说,每行一个事件,由索引号标记。事件指示符大多以感叹号开头,有时称为“砰”(!)。要重新运行历史记录中的命令,请使用一个感叹号,紧跟(没有空格)所需命令的索引号。例如,假设第1行包含命令echo"hello"并且您想再次运行它:$!1echo"hello"hello您可以使用相对定位,根据您在历史记录中的当前位置向后提供负行号。例如,返回历史记录中倒数第三个条目:$echo"foo"foo$echo"bar"bar$echo"baz"baz$!-3echo"foo"foo如果你只想返回一行,可以用简写!!而不是!-1。这样可以节省击键时间!$echo"foo"$!!echo"foo"foostringsearch您还可以搜索条目中的特定字符串,这反过来会搜索要运行的命令。要搜索以指定字符串开头的命令,请在要搜索的字符串后立即使用感叹号(无空格):$echo"foo"$true$false$!echoecho"foo"foo您也可以将(not刚开始)搜索包含该字符串的命令。为此,请使用!和以前一样使用要搜索的字符串,但在两端用问号(?)括起来。如果您知道字符串后面将跟一个换行符,则可以省略最后的问号(按回车键之前输入的最后一个字符):$echo"foo"$true$false$!?foo?echo"foo"foostringreplacement类似于在行首搜索字符串,可以搜索一个字符串并替换为新的字符串来改变命令:$echo"hello"hello$echo"world"world$^hello^fooecho"foo"foo使历史变得有用在Bash中,history命令的作用远不止此处介绍的内容,但它是习惯使用历史而不是仅仅将其用作参考的良好开端。经常使用history命令,并尝试无需键入命令即可执行的操作。你可能会感到惊讶!
