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

上面这些东西用好了真的很方便! 尽管我一直用快捷键...

results matching ""

    No results matching ""