如果我没有输入命令,有没有办法在 Ubuntu 终端中保存命令?

duc*_*ens 45 command-line ubuntu

我想知道是否有一种快速的方法可以在 Ubuntu 的终端中保存命令。场景是:

问题:

  1. 输入[长命令]
  2. 忘了我需要运行 [另一个命令] 才能运行 [长命令]

我希望能够以一种简单的方式保存命令以供以后使用,而不仅仅是#在它之前放置一个并将其放入上下键历史记录中。最好将其直接保存到寄存器或剪贴板。

我忘了说我也不想回声。

Jde*_*eBP 52

这不是您的终端,这是您的外壳

您正在寻找的 shell 机制的名称是kill buffer。人们忘记了 shell 命令行编辑器有这些。Z shell 中的 ZLE、Bourne Again shell 中的 GNU Readline、(FreeBSD) Almquist shell 中的 libedit、Korn shell 的行编辑器和 TENEX C shell 的行编辑器都有它们。

在所有这些 shellemacs模式中,只需转到要保存的行的末尾,使用⎈ Control+将其杀死到头部终止缓冲区U,键入并运行中间命令,然后使用⎈ Control+猛拉终止缓冲区内容Y。确保在输入中间命令时不对终止缓冲区执行任何操作。

vi模式中的 Z shell 中,您具有vi用于指定命名vi样式缓冲区的前缀序列以终止该行。您可以使用其他缓冲区之一代替默认缓冲区。只需使用类似" a d d(in vicmdmode) 的东西将整行删除到缓冲区“a”中,键入并运行中间命令,然后将该缓冲区的内容放入" a p.

在它们的vi模式中,Korn shell、Bourne Again shell 中的 GNU Readline 和 (FreeBSD) Almquist shell 中的 libedit 没有命名vi风格的缓冲区,只有一个 cut 缓冲区。 d d将该行删除到该缓冲区中,然后将缓冲区内容放入p, 将起作用。但它使用与vikilling 和yanking 在输入中间命令时相同的样式缓冲区。


use*_*803 31

您不想在您的行中添加echo(或任何其他无操作类型命令),因为您可能有 I/O 重定向,并且它们仍会被执行,可能会覆盖您可能仍需要访问的任何文件(直到您已准备好执行您的命令)。

相反,转到该行的开头并输入注释字符#。然后您可以按Enter,该行将保存在您的历史记录中。

如果你在 vi 模式下,ksh 和 bash(至少)有一个特定的命令:进入命令模式(按Esc)然后按#字符。

这是专门针对此用例的。O'Reilly Learning the Korn Shell书中对这个命令的描述说:

将#(注释字符)添加到该行并将其发送到历史文件;用于保存稍后要执行的命令而无需重新键入它。如果该行已经以 # 开头,请删除多行命令中的前导 # 和任何其他跟在换行符之后的注释字符。

  • 缺点是这是特定于 shell 的。例如,打开扩展模式的 Z shell 将其视为不匹配的模式,而不是注释。另外,当然,_这个问题不是专门问这个_的。 (6认同)
  • 默认情况下,它不在 Z shell 中。这仍然是_提问者明确排除的_。 (3认同)

小智 16

如果你正在运行zsh,你可以使用Ctrl-Q, 它运行命令push-line。它会将您当前输入的内容保存到堆栈中,清除提示,然后在您输入下一个命令后弹出堆栈。我一直在使用它来准确描述您描述的情况。


Edh*_*dil 6

我通常只是在行尾附加“'”(单引号),然后按 Enter 和 Ctrl-C。后来我用 Cursor Up 或 Ctrl-R 回忆起来。但是,您必须确保之前没有杂散的引号。

  • 我使用一个类似的技巧,用 \(反斜杠)然后回车。它转到下一行,然后我可以安全地按 Ctrl+C。 (3认同)