@@ -103,7 +103,9 @@ Readline 提供快速移动光标的快捷键。
103103
104104### 基本用法
105105
106- Bash 会保留用户的操作历史,即用户输入的每一条命令都会记录。退出当前 Shell 的时候,Bash 会将用户在当前 Shell 的操作历史写入` ~/.bash_history ` 文件,该文件默认储存500个操作。
106+ Bash 会保留用户的操作历史,即用户输入的每一条命令都会记录。有了操作历史以后,就可以使用方向键的` ↑ ` 和` ↓ ` ,快速浏览上一条和下一条命令。
107+
108+ 退出当前 Shell 的时候,Bash 会将用户在当前 Shell 的操作历史写入` ~/.bash_history ` 文件,该文件默认储存500个操作。
107109
108110环境变量` HISTFILE ` 总是指向这个文件。
109111
@@ -112,7 +114,17 @@ $ echo $HISTFILE
112114/home/me/.bash_history
113115```
114116
115- 有了操作历史以后,就可以使用方向键的` ↑ ` 和` ↓ ` ,快速浏览上一条和下一条命令。
117+ ` history ` 命令会输出这个文件的全部内容。用户可以看到最近执行过的所有命令,每条命令之前都有行号。越近的命令,排在越后面。
118+
119+ ``` bash
120+ $ history
121+ ...
122+ 498 echo Goodbye
123+ 499 ls ~
124+ 500 cd
125+ ```
126+
127+ 输入命令时,按下` Ctrl + r ` 快捷键,就可以搜索操作历史,选择以前执行过的命令。这时键入命令的开头部分,Shell 就会自动在历史文件中,查询并显示最近一条匹配的结果,这时按下回车键,就会执行那条命令。
116128
117129下面的方法可以快速执行以前执行过的命令。
118130
@@ -148,7 +160,7 @@ Goodbye H G
148160
149161注意,` !string ` 语法只会匹配命令,不会匹配参数。所以` !echo H ` 不会执行` echo Hello World ` ,而是会执行` echo Goodbye ` ,并把参数` H ` 附加在这条命令之后。同理,` !echo H G ` 也是等同于` echo Goodbye ` 命令之后附加` H G ` 。
150162
151- 由于”感叹号 + 字符“会扩展成以前执行过的命令,所以含有感叹号的字符串放在双引号里面 ,必须非常小心,有可能会报错 。
163+ 由于` !string ` 语法会扩展成以前执行过的命令,所以含有 ` ! ` 的字符串放在双引号里面 ,必须非常小心,如果它后面有非空格的字符,就很有可能报错 。
152164
153165``` bash
154166$ echo " I say:\" hello!\" "
@@ -162,18 +174,12 @@ $ echo "I say:\"hello\!\""
162174I say:" hello\!"
163175```
164176
165- 最后,按下` Ctrl + r ` 会显示操作历史,可以用方向键上下移动,选择其中要执行的命令。也可以键入命令的首字母,Shell 就会自动在历史文件中,查询并显示匹配的结果。
166-
167177### history 命令
168178
169- ` history ` 命令能显示操作历史,即` .bash_history ` 文件的内容。
179+ 前面说过, ` history ` 命令能显示操作历史,即` .bash_history ` 文件的内容。
170180
171181``` bash
172182$ history
173- ...
174- 498 echo Goodbye
175- 499 ls ~
176- 500 cd
177183```
178184
179185使用该命令,而不是直接读取` .bash_history ` 文件的好处是,它会在所有的操作前加上行号,最近的操作在最后面,行号最大。
@@ -191,14 +197,30 @@ $ history
191197
192198只要设置` HISTTIMEFORMAT ` 这个环境变量,就会在` .bash_history ` 文件保存命令的执行时间戳。如果不设置,就不会保存时间戳。
193199
194- 如果不希望保存本次操作的历史,可以设置环境变量` HISTSIZE ` 等于0。
200+ 环境变量` HISTSIZE ` 设置保存历史操作的数量。
201+
202+ ``` bash
203+ $ export HISTSIZE=10000
204+ ```
205+
206+ 上面命令设置保存过去10000条操作历史。
207+
208+ 如果不希望保存本次操作的历史,可以设置` HISTSIZE ` 等于0。
195209
196210``` bash
197211export HISTSIZE=0
198212```
199213
200214如果` HISTSIZE=0 ` 写入用户主目录的` ~/.bashrc ` 文件,那么就不会保留该用户的操作历史。如果写入` /etc/profile ` ,整个系统都不会保留操作历史。
201215
216+ 环境变量` HISTIGNORE ` 可以设置哪些命令不写入操作历史。
217+
218+ ``` bash
219+ export HISTIGNORE=' pwd:ls:exit'
220+ ```
221+
222+ 上面示例设置,` pwd ` 、` ls ` 、` exit ` 这三个命令不写入操作历史。
223+
202224如果想搜索某个以前执行的命令,可以配合` grep ` 命令搜索操作历史。
203225
204226``` bash
@@ -232,12 +254,44 @@ $ history -c
232254感叹号` ! ` 的快捷键如下。
233255
234256- ` !! ` :执行上一个命令。
235- - ` !n ` :执行历史文件里面行号为` n ` 的命令。
257+ - ` !n ` :` n ` 为数字, 执行历史文件里面行号为` n ` 的命令。
236258- ` !-n ` :执行当前命令之前` n ` 条的命令。
237259- ` !string ` :执行最近一个以指定字符串` string ` 开头的命令。
238260- ` !?string ` :执行最近一条包含字符串` string ` 的命令。
261+ - ` !$ ` :代表上一个命令的最后一个参数。
262+ - ` !* ` :代表上一个命令的所有参数,即除了命令以外的所有部分。
239263- ` ^string1^string2 ` :执行最近一条包含` string1 ` 的命令,将其替换成` string2 ` 。
240264
265+ 下面是` !$ ` 和` !* ` 的例子。
266+
267+ ``` bash
268+ $ cp a.txt b.txt
269+ $ echo ! $
270+ b.txt
271+
272+ $ cp a.txt b.txt
273+ $ echo ! *
274+ a.txt b.txt
275+ ```
276+
277+ 上面示例中,` !$ ` 代表上一个命令的最后一个参数(` b.txt ` ),` !* ` 代表上一个命令的所有参数(` a.txt b.txt ` )。
278+
279+ 下面是` ^string1^string2 ` 的例子。
280+
281+ ``` bash
282+ $ rm /var/log/httpd/error.log
283+ $ ^error^access
284+ rm /var/log/httpd/access.log
285+ ```
286+
287+ 上面示例中,` ^error^access ` 将最近一条含有` error ` 的命令里面的` error ` ,替换成` access ` 。
288+
289+ 如果希望确定是什么命令,然后再执行,可以打开` histverify ` 选项。这样的话,使用` ! ` 快捷键所产生的命令,会先打印出来,等到用户按下回车键后再执行。
290+
291+ ``` bash
292+ $ shopt -s histverify
293+ ```
294+
241295## 其他快捷键
242296
243297- ` Ctrl + j ` :等同于回车键(LINEFEED)。
0 commit comments