返回介绍

Hack-54 History 扩展

发布于 2025-03-08 17:38:45 字数 1949 浏览 0 评论 0 收藏 0

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

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

本书简介:

  • Linux 进阶技巧
  • 巧妙的命令组合
  • Bash 某些技巧
  • 一共一百零一个(包括充数的)
  • 最后有个奖励章(额外技巧)

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文