我知道:
$ command -[options] string string2
可以通过以下方式轻松更改:
$ ^string^string3
要获得:
$ command -[options] string3 string2
我还能用它做什么,就像我试图连续两次一样:
$ ^string3^string && ^string2^string4
或在命令之后
$ ffmpeg -i file output.mp4 && ^.mp4^.mp3
或者
$ echo blue && ^blue^red
^blue^red: command not found
不工作
或者
$ echo blue
blue
$ ^blue^red && ^red^purple
red blueblue red^purple
不工作
或者
$ echo blue
$ ^blue^red^red^purple
echo redred^purple
redred^purple
还是行不通
这是一个 bash 脚本,我知道的最简短的是 ^...^...
我需要一个简短的命令来完成它,
有了这个例子,你就明白了,
什么是必要的?有人建议我:
$ echo blue && !#:s/blue/purple/ true
echo blue && echo purple && true
blue
purple
结果非常符合我的预期,但最终导致>
命令无法完成。更新:我通过在它的末尾添加 true 来修复它。
这个问题以前在 StackOverflown 中,被推荐在这里!
点击↑并使您要更改的命令出现在命令行中。然后Ctrl+ X, Ctrl+E在您喜欢的编辑器中编辑它。
这取决于编辑器和您对它的熟悉程度,您可以如何快速轻松地进行所需的更改。要执行,请以编辑器提供的任何名称保存文件并退出编辑器。
通过设置
VISUAL
或EDITOR
变量选择您的编辑器。来自man 1 bash
:注意键绑定可以配置。Ctrl+ X, Ctrl+E是我所说的默认值。
此外,您可能会发现这很有用:ctrl-xe without execution command立即
第一:所有这些快捷方式都是用于交互使用,而不是用于编写脚本。它们都是 bash 历史系统的一部分,通常在脚本中被禁用(并且可能应该被禁用)。
第二:
^original^replacement
语法是所谓的“快速替换”,它意味着(顾名思义)通过简单的更改重新运行最后一个命令的快速方法。超出这个基本目的它是不可扩展的——没有办法用这种语法进行多项更改。但是您可以使用更通用(但更详细)的语法:!!
指定最后一个命令(实际上是行;见下文),并且您可以添加修饰符:s/original/replacement/
来进行更改。这是一个有两个替换的示例:第三:正如我所说,这个历史回顾和回放功能确实适用于行(或多行命令),而不是简单的命令。这是一个例子:
请注意,
!!:s/command/line/
不记得上一个命令,,echo "command three"
甚至是echo "command two"
,而是整个上一行!此外,即使command
在该行中发生了两次,替换也只执行了一次。如果要替换所有匹配项(“全局替换”),请添加g
修饰符 (!!:gs/original/replacement/
)。您可以使用许多其他修饰符。最后:这可能会变得复杂,并且当您按下回车键时很容易错误预测会发生什么。Kamil Maciorowski 建议以交互方式调用和编辑上一个命令,让您可以在按下回车键之前查看该命令,因此我推荐该方法。
实际上,我通常自己做的就是按向上箭头来取回之前的命令,然后使用 bash 的内置行编辑功能进行我想要的更改。