将命令从历史记录复制到 bash 提示符

Loo*_*oom 6 bash command-history keyboard shell-script

有时我想从history输出中获取一些命令,将其复制到 bash 提示符,进行一些更改并运行它。有没有办法在history不涉及鼠标的情况下将命令从输出复制到 bash 提示符?例如,这将是一些我可以绑定快捷方式的脚本。

也许我不够了解fc,但看起来我无法通过fc(例如Tab通常的命令提示符)选择文件夹或文件

Kiw*_*iwy 8

你需要看看 bashfc命令。

如果您想在重新执行历史行之前进行编辑,请执行以下操作

fc 123
Run Code Online (Sandbox Code Playgroud)

123您在键入命令时看到的历史记录行号在哪里history
它将打开您最喜欢的编辑器,并允许您修改该行,然后退出并保存,它将运行。

您还可以执行以下一系列命令:

fc 123 135
Run Code Online (Sandbox Code Playgroud)

处理从 123 到 135 的命令历史记录。

编辑 1:
如果您需要在没有编辑的情况下运行,请考虑从历史记录中重新执行 fc 命令


Dep*_*ado 6

如果要重新执行历史记录中的命令,可以在终端中使用 ^r (ctrl + r)。这是一个反向搜索,允许检索命令并在您输入之前对其进行编辑。我不知道它是否适用于 bash 以外的其他 shell。虽然它就像我见过的最有用的东西之一。

从 bash 文档:

reverse-search-history (Cr)
从当前行开始向后搜索,并根据需要在历史中“向上”移动。这是一个增量搜索。

这是手册。


Loo*_*oom 0

下面是一个tmux方法。输入命令编号(如!1234)并按Alt+ Shift+ X。之后,带有数字的命令1234将在终端提示符中打印,并且该命令照常可编辑。

copy_line_from_history_to_prompt () {
  READLINE_LINE=$( history -p "$READLINE_LINE" ) ;
}
bind -x '"eX": copy_line_from_history_to_prompt' # Alt+Shift+X
Run Code Online (Sandbox Code Playgroud)