在执行历史扩展时,有没有办法匹配命令的多个单词/标记上的历史条目?

在执行历史扩展时,有没有办法匹配命令的多个单词/标记上的历史条目?

我正在使用一个命令行工具,该工具提供了许多子命令,这些子命令都使用相同的二进制文件,例如tool footool bar等,并且在我工作时,这些命令被放入我的 Bash shell 历史记录中,例如:

 7322  [2021-04-16 15:37:45 +0000] tool foo .
 7323  [2021-04-16 15:37:47 +0000] tool bar
 7324  [2021-04-16 15:37:50 +0000] tool baz
 7325  [2021-04-16 15:38:01 +0000] tool qux -a -b asdf -c=100 /var/lib/foo/...
 7326  [2021-04-16 15:38:15 +0000] htop
 7327  [2021-04-16 15:38:21 +0000] tool foo . -x

确切的工具是专有的(其确切功能无关),并且不具有帮助跟踪和调用其自身命令的特定功能。

例如,我想回忆一下命令 7325 tool qux -a -b asdf -c=100 /var/lib/foo/...(假设它还不够新,无法多次点击向上箭头)。命令和参数经常变化,以至于建立 Bash 别名似乎不实用或不方便(要么编辑 .bashrc,要么在 shell 关闭时丢失别名)。我非常有信心最后的当我运行时tool qux,它具有我想要使用的正确参数,或者是我无论如何都需要编辑的相当安全的参数集。

我知道我可以运行 history | grep qux查找历史索引,然后运行!7325。有什么办法我可以直接地通过在 Bash 提示符中输入一组按键来回忆起它吗?!tool qux不起作用,因为在这种情况下它将运行tool foo . -x qux。我尝试引用它,但看起来扩展发生得更早。

答案1

您可以使用 bash 的“反向交互式搜索”,通常可以通过Ctrl+访问R。该组合键将弹出此提示:

 (reverse-i-search)`': 

在那里,您可以开始编写命令,它将从您的历史记录中自动完成,最新的先完成。但是,它与您输入的整个字符串匹配,因此tool q会立即带回tool qux -a -b asdf -c=100 /var/lib/foo/....那应该做你想做的事。

man bash

       reverse-search-history (C-r)
              Search backward starting at the current line  and  moving  `up'
              through  the  history  as  necessary.   This  is an incremental
              search.

相关内容