History 扩展
用这个功能可以选择特定的历史记录, 不论是修改还是立即执行, 都可以完成.
这个扩展以!
(叹号)开头.
!!
重复上一条命令!10
重复历史记录中第10条命令!-2
重复历史记录中倒数第二条命令!string
重复历史记录中最后一条以string
开头的命令!?string
重复历史记录中最后一条包含string
的命令^str1^str2^
把上一条命令中的str1
替换成str2
, 然后再执行!!:$
扩展成上一条命令的最后一个参数 ( 完全可以用Alt+.
快捷键啊! )!string:n
扩展成最后一条以string
开头的命令的第n
个参数....
!?string
栗子
假设你曾经执行过这样一条命令:
$ /usr/local/apache2/bin/apachectl restart
然后过了一会儿你想重复这个命令, 然后你这样做:
$ !apache
-bash: !apache: event not found
哔~ 找不到!
当然, 因为曾经的那条命令并不是以apache
开头的, 但是:
$ !?apache
/usr/local/apache2/bin/apachectl restart
这样就会执行, 因为这条命令包含了apache
这个字.
^str1^str2^
栗子
作者给的例子太牵强, 我给个实用的:
➤ cat cal_random.sh
#!/bin/bash
echo hi
test(){
for i in {1..9};do
echo $i;
done
}
... ... ...
exit 0
➤ ^cat^less
less cal_random.sh
➤
哈, 这个也不实用, 因为要达到这样的目的有好多方法, 而替换这一种实在太麻烦了.
!!:$
栗子
废话不说, 上代码 ~!
➤ cp cal_random.sh cal_random.sh.bak
➤ head -n 2 !!:$
head -n 2 cal_random.sh.bak
#!/bin/bash
echo hi
➤
在这个例子中, !!:$
被扩展成了上一条命令的最后一个参数, 可以理解为正则的$
表示最后一样.
!string:n
栗子
曾经执行了这样一条命令
cat file1 file2 file3
然后你想截取其中的第二个参数,
那么你就可以这样(确保最后一条以cat开头的命令是它):
ls !cat:2
上面这些东西用好了真的很方便! 尽管我一直用快捷键...