粘贴命令时停止终端自动执行

粘贴命令时停止终端自动执行

是的,这是一个有点烦人的功能,因为有时会发生这种情况,而其他时候则不会,这很奇怪。

我将命令粘贴到终端中,以便调整其参数,然后有时我粘贴后它立即执行。有时却不执行。

这包括令人尴尬的(在 IRC 上发表无意义的评论)以及危险的。

我怎样才能彻底关闭此功能?我永远、永远、永远不希望在粘贴到终端时自动执行。

答案1

没有自动执行。您可能还会在命令后复制换行符(或更多)。

如果您粘贴命令中断,shell(命令行)认为您自己按下了中断(Enter,Return)按钮。


这个答案只能解释为什么 OP 会得到不受欢迎的行为。然而,在另一个答案,有一个真正的解决方案对于原始发帖人的问题。

答案2

真实的解决方案是使用 打开编辑模式ctrl-x ctrl-e,然后安全地将剪贴板粘贴到您选择的编辑器(通常是 emacs 或 vim)中。编辑完命令后,保存并退出,它将在命令行中运行。对于长命令或复杂命令,这是一个好习惯,尤其是在将提交哈希粘贴到 git 命令中时,从长远来看可以帮助您避免一些可怕的结果。

可以通过设置 VISUAL 和 EDITOR 变量来更改编辑器(这些变量具有不同的含义,请参阅这里)。

答案3

正如其他人提到的,当粘贴的文本包含换行符时,就会出现问题。有了这些知识,你的问题与这一个关于服务器故障。不同的网站,所以我将在这里重复我的答案……

你想要的叫做'括号内的粘贴',这是某些 shell 中提供的功能。

假设您正在使用最新版本的 bash shell,您可以像这样为当前会话打开它:

bind 'set enable-bracketed-paste on'

现在通过粘贴多行来尝试一下:

echo Hello world
echo Again, I say, hello!

shell 识别出文本是粘贴的(不是键入的),并等待您的确认。如果一切看起来安全,请按 Enter 键。如果不安全,请按 Control-C 取消。

如果您希望为每个新会话启用括号粘贴,请将命令添加到您的 .inputrc 文件中:

cd ~
echo "set enable-bracketed-paste" >> .inputrc

另一个选择是从狂欢,其中括号内的粘贴默认启用。要将当前 shell 替换为 zsh shell:

exec zsh

使用 zsh,粘贴的文本会突出显示,这很棒。再次按 Enter 执行命令或按 Control-C 取消。

如果你喜欢 zsh,并希望将其设为默认 shell:

chsh -s /bin/zsh

答案4

我使用此别名进行粘贴,但我的命令未执行

alias nonewlinepaste='history -s `xsel -b`; sleep 1; xdotool key Up 1>/dev/null'  # xsel ref. https://unix.stackexchange.com/a/96398/17671  # xdotool ref. https://unix.stackexchange.com/questions/267704/command-to-simulate-keyboard-input#comment1038650_267705

相关内容