我想知道是否有一种快速的方法可以在 Ubuntu 的终端中保存命令。场景是:
问题:
- 输入了一个[长命令]
- 忘了我需要运行 [另一个命令] 才能运行 [长命令]
我希望能够以一种简单的方式保存命令以供以后使用,而不仅仅是#
在它之前放置一个并将它放在上下键历史记录中。最好将其直接保存到寄存器或剪贴板。
我忘了提到我也不想回应。
我想知道是否有一种快速的方法可以在 Ubuntu 的终端中保存命令。场景是:
问题:
我希望能够以一种简单的方式保存命令以供以后使用,而不仅仅是#
在它之前放置一个并将它放在上下键历史记录中。最好将其直接保存到寄存器或剪贴板。
我忘了提到我也不想回应。
这不是你的终端,这是你的外壳。
您正在寻找的 shell 机制的名称是kill buffer。人们忘记了 shell 命令行编辑器有这些。Z shell 中的 ZLE、Bourne Again shell 中的 GNU Readline、(FreeBSD) Almquist shell 中的 libedit、Korn shell 的行编辑器和 TENEX C shell 的行编辑器都有它们。
在所有这些处于
emacs
模式下的 shell 中,只需转到要保存的行的末尾,用⎈ Control+将其终止到头部终止缓冲区U,键入并运行中间命令,然后用⎈ Control+拉出终止缓冲区的内容Y。确保在输入中间命令时不对终止缓冲区执行任何操作。在 Z shell in
vi
mode 中,您有vi
前缀序列用于指定命名vi
- 样式的缓冲区来终止行。您可以使用其他缓冲区之一而不是默认缓冲区。只需使用" a d d(invicmd
mode) 之类的东西将整行删除到缓冲区“a”中,键入并运行中间命令,然后将该缓冲区的内容与" a p.在它们的
vi
模式下,Korn shell、Bourne Again shell 中的 GNU Readline 和 (FreeBSD) Almquist shell 中的 libedit 没有 namedvi
-style 缓冲区,只有一个剪切缓冲区。 d d将行删除到该缓冲区中,然后将缓冲区内容放入p, 将起作用。但是它使用了相同的vi
-style 缓冲区,在输入中间命令时,kill 和 yanking 将使用相同的缓冲区。您不想在您的行前添加
echo
(或任何其他无操作类型命令),因为您可能有 I/O 重定向,并且它们仍将被执行,可能会覆盖您可能仍需要访问的任何文件(直到您已准备好执行您的命令)。相反,请转到行首并输入注释字符
#
. 然后您可以按Enter,该行将保存在您的历史记录中。如果您处于 vi 模式,则 ksh 和 bash(至少)对此有特定的命令:进入命令模式(按Esc)然后按#字符。
这是专门针对这个用例的。O'Reilly Learning the Korn Shell一书中对该命令的描述说:
如果你正在运行
zsh
,你可以使用Ctrl-Q,它运行命令push-line
。它会将您当前键入的内容保存到堆栈中,清除提示,然后在您输入下一个命令后弹出堆栈。我一直使用它来解决您描述的情况。我通常只是在行尾附加“'”(单引号),然后按 Enter 和 Ctrl-C。后来我用 Cursor Up 或 Ctrl-R 回忆它。不过,您必须确保之前没有杂散引号。
如果您的 shell 设置为emacs 模式(我相信 bash 的通常默认设置):
那么你也能:
这很快就可以做到,并成为一种习惯。ctrl-k 也可以用于只保存一行的“结束”(例如:2 个长参数,你知道以后会重用,你“杀死”(+保存),然后你可以“猛拉”随时返回)
如果你的 shell 处于vi模式,你可以使用常用的 vim 命令:
可能会根据情况起作用的解决方法。
按 home,输入新命令,然后 && 先运行,如果成功则运行第二个。
然后不会将其保存为单独的步骤。
或者:
如果您已经输入了第一个命令(如按回车键),您可以键入
first_command && !!
将在其中插入第二个命令!!
您可以使用 GUI 或 shell 的工具选择/复制文本,然后将其粘贴到某个文件中,或者只是不要忘记不被后续选择覆盖它(因此您可以在需要时将其粘贴回来),但我发现那个尴尬:完整命令行的位置在“上下键历史”中是恕我直言。
无需
#
在行首添加 a 并按<Enter>
,您可以创建一个键绑定,将当前命令行保存在历史记录中而不执行它。例如。使用 bash,将其绑定到
Meta/Alt-C
或Esc-C
(通常capitalize-word
在 emacs 键绑定中绑定到;如果您已经在使用它,请使用另一个键):如果您使用的是 vi 键绑定,您可以
^G
为它蹲下未使用的:这也将在之后清除线路;如果您不希望这样(并且更喜欢使用例如手动取消该行
^C
),请省略READLINE_LINE=
.您可以直接编辑 shell 的历史文件,而不是处理各种可能深奥的 readline 键盘快捷键。使用 bash:
history -w
(刷新现有历史)$EDITOR $HISTFILE
(编辑您的历史文件(~/.bash_history
默认情况下)并进行任何您想要的更改)history -c ; history -r
(清除你的 shell 的内存历史并从历史文件中重新加载)由于我喜欢对我的 bash 历史进行很多调整,所以我编写了一个 bash 函数以使其更方便:
我还有一个单独的 bash 功能,可以在我的 bash 历史记录中执行快速搜索和替换,以更正和重新运行输入错误的命令。
如果您已经键入了第二个命令,请转到行首,键入第一个命令,然后用分号将两者分开。这是如果成功并不重要。如果它确实重要,则 && 其他人建议。
不,它不会保存到命令行历史记录中,因为这只需要输入的命令。
但是,您可以在前面加上“echo”来保存输入复杂的内容
然后调用 echo 命令并编辑以删除“echo”。
如果您需要历史记录中的某些内容为以后做准备,您还可以编辑历史记录文件,例如
~/.bash_history
bash 或~/.history
tcsh。通过更改现有命令进行编辑,这是最简单的,因为您无需尝试猜测文件语法。下一次 shell 启动时将被读入(如果 shell 配置为保存和读取历史记录,这在大多数系统上默认发生)。第三种无需大量输入即可使用复杂命令的方法是为命令定义别名。同样,语法因 shell 变体而异:
重击:
tcsh:
新命令
ll
的作用与输入相同ls -algF --color=auto
。alias
您可以通过不带参数的简单执行来查看现有别名(例如) 。这些行可以分别输入
~/.bashrc
和~/.tcshrc
,以保存它们以供所有即将到来的 shell 初创公司使用。