“忘记历史的Linux用户注定要输入很多信息。”
这也让强有力的历史命令(包括Bash shell的历史变体)不仅在援引之前执行命令而不需重新输入它们时有用,在调用其它很少用到的命令时也有用,这省去了必须重新使用它们的麻烦。该命令按时间顺序列出了之前执行命令的清单。
该命令的输出示例如下:
$ history ... 62 rm 092210.sql 63 mysqldump 64 mysqldump -u root -p dev_gamenomad_com > 092210.sql 65 more 092210.sql 66 rm 092210.sql ... 9991 mkdir chapter05 9992 cd chapter05 9993 dir 9994 npm install websocket-server 9995 node hello.js 9996 exit 9997 history |
与每条命令相关的顺序号服务于重要目的,允许用户通过提供直接跟着感叹号的顺序号来重新执行相关命令,如下:
$ !10000 sudo /etc/init.d/apache2 start * Starting web server apache2 |
但这并不是全部。Linux历史命令能做到更多,本文后续部分也将提及。
掌控历史扩展
敲击向上箭头键会显示之前执行的命令,敲击Enter键会再次执行该命令。但是还可以使用另一个可能更快的包括历史扩展功能的选择:
$ !! |
如果你重复执行同样两条或三条命令的不同排列组合,你还可以选择通过识别其位移负指数来执行出现在上一命令出现处的命令。例如,执行之前命令的前一命令(回退两条命令),运用以下序列:
$ !-2 |
执行早期命令的另一方式是输入紧跟着感叹号的命令序列号的开头。符合字符对象的第一条命令会执行。举例来说,假设最后三条命令如下:
$ history ... 9876 build-book /home/wjgilmore/easy_php 9877 mkdir chapter05 9878 cd chapter05 9879 touch chapter05.md |
你可以只通过运行以下命令来再次执行构书脚本:
$ !b |
用两步过程创建一个确认它的新目录和导航和以运用历史扩展缩短。在本例中,我创建了一个叫做easy_bash的新目录,位置在/home/wjgilmore/books。要确认该目录,运用!$来获得在前一命令中发现在最后“字符”:
$ mkdir /home/wjgilmore/books/easy_bash $ cd !$ |
搜索命令历史
虽然可以翻阅命令历史(或使用grep命令),但在使用Ctrl+R开放选择搜索它之后也可以调用该命令的片段,提示的命令行将如下所示:
(reverse-i-search)`': |
开始输入命令片段,命令行会实时更新反映出最符合的一条。输入apa后会出现类似于这样的命令:
(reverse-i-search)`apa': sudo /etc/init.d/apache2 start |
当你看到想要的命令,敲击Enter执行它,或者敲击向上箭头键在重新执行前修改它。