从 bash 历史记录中选择命令

从 bash 历史记录中选择命令

按向上按钮很麻烦,而且我可能会错过我正在寻找的命令。因此,history在终端上输入时,我会得到之前输入的所有命令,并以数字为索引。有什么方法可以只调用与命令关联的数字吗?

答案1

bash 历史记录可以做很多有用的事情,Terry Wang 提到的搜索Strg-r是其中很重要的一个。但是也可以做你要求的事情。

你可以用 重新执行上一个命令!!。这样,你还可以编辑上一个命令。例如,如果你忘记获取命令的 root 权限

apt-get install a-long-list-of-packages

你不必重新输入所有这些。只需调用

sudo !!

如果你想在历史记录中的特定位置重新执行命令,你也可以使用!,例如

!3

重新执行位置 3 处的命令。请注意,这是从顶部开始计算的。因此,如果您在历史记录中存储了 500 条命令,!1则为“500 条命令之前”。您也可以使用负数。例如

!-2

将重新执行倒数第二条命令。

您还可以重新执行以如下字符串开头的最后一个命令

!apt-

这将重做以“apt-”开头的最后一行。如果你想要字符串出现在行中任何地方的最后一个命令,你可以使用类似

!?pt-ge

bash history 可以做更多有趣的事情。为了展示其广泛的可能性,你可以从 history 中专门访问命令的参数。因此

!-5:3:p

将打印倒数第二条命令的第三个参数至第五个参数。

编辑:关于下面 Rudie 的评论,在标准设置下,这个 bash 历史扩展确实是直接执行的。最好这样描述:像这样的!-3调用被取代使用 shell 的历史记录中的倒数第三条命令然后您的输入(包含替换)已执行。因此,如果您键入!-3并按下ENTER,而您的倒数第三个命令是,则其效果与您再次键入并“自行”按下的ls ~效果相同。ls ~ENTER

如果您不想这样做,您可以设置 shell 选项histverify。要设置和取消设置 shell 选项,您可能需要阅读命令shopt。使用histverifyset,类似这样的调用!-3只会将历史记录中的替换写入命令行,但不会直接执行它。您可以自己按下关键键ENTER- 或者如果您愿意的话,可以不这样做。

答案2

是的,有。例如,如果你想执行旁边有数字 1234 的命令,请执行以下操作:

!1234

其他有用的东西:

  • 如果您想运行最后运行的命令,请执行以下操作:

    !!
    
  • 如果您想运行最后ls运行的命令,请执行以下操作:

    !ls
    
  • 如果您刚刚运行ls /some/long/path,并且想要cd执行此操作,请执行以下操作:

    cd !$
    

了解更多信息:

答案3

使用组合键Ctrl+ R,您将能够使用关键字来搜索您的 Bash 历史记录。

快速 bash 键绑定参考可以在这里找到:http://ss64.com/bash/syntax-keyboard.html

答案4

history命令将显示所有命令及其相关编号。如果您只想在执行命令行 #135 之前进行快速检查,您可以输入:

echo !135

这将向您显示将要执行的操作。

相关内容