我知道如何重复命令并在其后添加更多文本,!!
如下所示:
ls -l
!! tmp
第二行扩展为ls -l tmp
.
但是如果我想在单词之间的命令中添加参数怎么办?例如,如果我执行了以下操作:
ls tmp
...然后我经常想将-l
参数添加到命令中,但不重新输入整个内容或按向上键并使用箭头键将光标设置到正确的位置。!! -l
不起作用,因为它变得ls tmp -l
无效。 (实际上,该命令比我在这里使用的简单示例长得多。)
换句话说,我正在寻找类似?? -l
where ??
is 重复前一个命令但-l
在第一个和第二个单词之间添加的内容。
为了清楚起见,ls -l tmp
这只是一个简化的例子。现实生活中的用例更接近于类似的情况/very/long/path/to/very-long-command --with=a --very=long --parameter=list
。
答案1
!!:0
是前一个命令的第 0 个字,并且!!:*
是除第 0 个字之外的所有字。
!!:0 -l !!:*
是您正在寻找的命令。
来源https://www.gnu.org/software/bash/manual/bash.html#Word-Designators
答案2
你可以:
$ ls -l
[..]
$ !:0* /tmp
[..]
这将调用ls -l /tmp
.请参阅bash
手册页:
Word Designators
Word designators are used to select desired words from the event. A : separates the
event specification from the word designator. It may be omitted if the word
designator begins with a ^, $, *, -, or %. Words are numbered from the beginning of
the line, with the first word being denoted by 0 (zero). Words are inserted into the
current line separated by single spaces.
0 (zero)
The zeroth word. For the shell, this is the command word.
n The nth word.
^ The first argument. That is, word 1.
$ The last argument.
% The word matched by the most recent `?string?' search.
x-y A range of words; `-y' abbreviates `0-y'.
* All of the words but the zeroth. This is a synonym for `1-$'. It is not an
error to use * if there is just one word in
the event; the empty string is returned in that case.
x* Abbreviates x-$.
x- Abbreviates x-$ like x*, but omits the last word.
If a word designator is supplied without an event specification, the previous command
is used as the event.
答案3
Bash 允许您快速搜索并在提示符中返回历史记录中的命令,以便您可以在执行之前手动编辑它。
根据提示:
- 按Ctrl-R(像右everse):提示应该改变,以通知您现在处于反转模式,
- 开始键入命令的任何部分(在您的示例中,您可以键入
ls
、tmp
,甚至mp
匹配ls tmp
):最后使用的与您的击键相匹配的命令将在您键入时显示。 - 找到命令后,只需
tab
在正常提示符中键入即可获取它:它还不会被执行,它将在这里等待您的修改,例如任何参数添加、删除或更改,或应用不同的命令相同的文件等
答案4
要启动上一个命令并在命令名称后立即添加选项,请按以下键:
Up Home Ctrl+ Right Space(键入选项)Enter
如果光标键在您的系统上不起作用,您可以使用 Emacs 运动键代替:
Ctrl+ P Ctrl+ A Meta+ F Space(键入选项)Enter
如果命令名称有多个单词(例如,因为它是带有斜杠的路径),Ctrl+Right只会移过第一个斜杠。而是搜索第一个空格。
Up Home Ctrl+ S Space Esc Space(键入选项)Enter
Ctrl+ P Ctrl+ A Ctrl+ S Space Esc Space(键入选项)Enter
通过此搜索,您可以从代替Up Up,Up Home或Ctrl++代替++开始。按键次数相同,但打字稍微容易一些,但不太直观。P CtrlPCtrlP CtrlA
如果您愿意,您可以使用历史替代设施,如果命令包含斜杠,则按键次数会减少。
^ ^ --option
请注意选项后面的尾随空格:您将用一个空格、新选项和另一个空格替换命令中的第一个空格。