7. 历史命令扩展示例
使用history
扩展,您可以从历史记录中选择特定命令,按原样执行它,或者根据您的需要修改并执行它。
从!
开始历史扩展。
命令 | 描述 |
---|---|
!! |
重复上一个命令 |
!10 |
重复历史中的第 10 个命令 |
!-2 |
重复历史中倒数第 2 个命令 |
!string |
重复历史记录中以 'string' 开头的命令 |
!?string |
重复历史记录中包含 'string' 字符串的命令 |
^str1^str2^ |
将上一条命令中的 str1 替换为 str2 并执行 |
!!:$ |
获取上一个命令的最后一个参数 |
!string:n |
获取历史记录中以 'string' 开头的命令的第 n 个参数 |
!?string
示例
让我们假设您在某个时刻执行了以下命令,并且它位于历史记录中的某个位置。
$ /usr/local/apache2/bin/apachectl restart
稍后,当您想要执行相同的命令时,如果您尝试以下操作,它将失败,因为它正在寻找以 "apache"
开头的行。
$ !apache
-bash: !apache: event not found
但是,如果执行以下操作,它将查找包含字符串 "apache"
的任何命令并执行它,如下所示。
$ !?apache
/usr/local/apache2/bin/apachectl restart
^str1^str2^
示例
有时您可能会使用快速ls
命令检查文件是否存在,如下所示。
$ ls /etc/sysconfig/network
验证文件存在后,要使用vi
查看文件的内容,无需再次键入整个文件名。
相反,请执行以下操作,这会将上一个命令中的单词 "ls"
替换为单词 "vi"
并执行该命令。
$ ^ls^vi
vi /etc/sysconfig/network
!!:$
示例
在此示例中,以下命令将/etc/passwd
文件的副本作为passwd.bak
复制到主目录。
$ cp /etc/passwd /home/ramesh/passwd.bak
创建文件的备份后,如果要打开备份文件,则无需再次键入整个备份文件名。
相反,您可以将上一个命令的最后一个参数与vi
命令一起使用,如下所示。
$ vi !!:$
vi /home/ramesh/passwd.bak
请注意!:$
与!!:$
完全相同。 所以,上面的例子也可以如下执行。
$ vi !:$
vi /home/ramesh/passwd.bak
!string:n
示例
当您执行具有多个参数的命令时(如下面的tar
命令示例所示),您可以仅从中提取特定参数以供以后使用。
$ vi !:$
$ tar cvfz ~/sysconfig.tar.gz /etc/sysconfig/*
现在,如果您想ls
新创建的tar.gz
文件,您可以执行以下操作,这将采用上一个tar
命令的第二个参数。
$ ls -l !tar:2
ls -l ~/sysconfig.tar