要使用历史命令,你可以像这样写$!100
。但有时我会对命令做一些小改动。
有没有办法从历史记录中获取命令而不执行它。
现在我使用鼠标从历史记录中复制和粘贴。我想知道如何仅使用键盘来完成此操作。
答案1
答案2
在 Bash 中,开始输入命令的前几个字母,然后按Ctrl+R开始历史记录搜索。您可以按Ctrl+R继续在 Bash 历史记录中向后搜索。找到所需的命令后,使用箭头键选择/浏览命令以根据需要进行编辑和执行。
您还可以使用空的命令缓冲区按Ctrl+R并从那里开始搜索。
答案3
除了已经提到的通过 ctrl+r 进行历史记录搜索之外,您还可以使用您已经熟悉的历史记录条目编号方法:
!<history entry number>
在其他命令中间,例如
echo !100
甚至引用先前命令的参数。例如,假设在我的历史记录中,条目 100 是:
ping google.com
我可以通过从历史记录条目中提取第一个参数来在 Google 上进行主机查找,如下所示:
host !100:1
这对于对上一个命令的特殊引用有效
!!
以及。当然,对于编号条目,您必须通过键入 history 并查看或通过管道传输到 grep 来了解它们的条目编号。如果您想通过匹配文本来从历史记录中提取内容,您可以在 ! 语句中使用上一个命令中的文本。例如,利用我在历史记录中有 ping google.com 语句的事实,我可以像这样引用它:
host !ping:1
使用文本搜索方法时要记住的是,它会向后搜索并提取第一个匹配项。
答案4
有没有办法从历史记录中获取命令而不执行它?
也许我没有抓住问题的重点,因为我怀疑我不是唯一知道 的人:p
。它代表“print”。如果您输入!100:p
,shell 将打印(即显示)命令 #100 而不执行它。
如果你不了解:
历史上的运算符,你应该学习一下。
正如“数字例证”指出的那样, 检索:n
n 命令的第 1 个单词。您还可以使用来获取范围;并且有有趣的默认值。例如,(离开:n-m
:-
n和米空白)会返回除最后一个单词之外的所有单词。 :$
返回最后一个单词。 :h
例如,如果输入的是“head”,那么
ls -ld /asdfg/qwerty/foo/bar
然后
!:- !$:h
变成
ls –ld /asdfg/qwerty/foo
哦,是!$
的缩写!:$
。 :s
是替代,如。这与以下情况相同,但不包括以下内容::s/old/new/
^old^new^
:s
可以用于任何命令(如!100:s/...
);^^
仅适用于最近的命令。:s
可以用于单个单词或单词范围。例如,!:- !$:s/d/D/
获取
ls -ld /asDfg/qwerty/foo/bar
(而不是
ls -lD ...
)。:s
可以全局应用。语法不直观,但是,where替换第一次出现的情况,替换每次出现的情况。:s/old/new/
:gs/old/new/
此外,一旦您从历史记录中获取了一条命令而不执行它(例如,使用!100:p
),可能经过修改(如上所示),它将成为历史记录列表中最新的命令。现在您可以按下↑ (cursor up)并编辑它。