是的,这是一个有点烦人的功能,因为会发生这种情况,而其他时候不会,非常奇怪。
我将命令粘贴到终端中以调整其参数,有时它会在我粘贴它的第二个执行。有时不会。
这范围从尴尬(在 IRC 上发布无意义的评论)到危险。
如何永久关闭此功能?当我粘贴到终端时,我永远,永远,永远不希望终端自动执行。
小智 34
没有自动执行。您可能还在命令之后复制了一个换行符(或更多)。
如果你粘贴一个带中断的命令,shell(命令行)认为你是自己按下了中断(回车,回车)按钮。
这个答案仅解释了为什么 OP 会出现不良行为。但是,在另一个答案中, OP 的问题有一个真正的解决方案。
小智 10
正如其他人所提到的,当粘贴的文本包含换行符时会出现问题。有了这些知识,您的问题或多或少与Server Fault 上的问题相同。不同的网站,所以我会在这里重复我的答案......
您想要的是“带括号的粘贴”,该功能在某些 shell 中可用。
假设您使用的是最新版本的 bash shell,您可以为当前会话打开它,如下所示:
bind 'set enable-bracketed-paste on'
Run Code Online (Sandbox Code Playgroud)
现在通过粘贴多行来尝试一下:
echo Hello world
echo Again, I say, hello!
Run Code Online (Sandbox Code Playgroud)
Shell 识别出文本已粘贴(未键入),并等待您的确认提示。如果一切看起来都可以安全进行,请按 Enter 键。如果没有,请按 Control-C 取消。
如果您想为每个新会话启用带括号的粘贴,请将命令添加到您的 .inputrc 文件中:
cd ~
echo "set enable-bracketed-paste" >> .inputrc
Run Code Online (Sandbox Code Playgroud)
另一种选择是从bash切换到zsh,默认情况下启用括号粘贴。用 zsh shell 替换当前的 shell:
exec zsh
Run Code Online (Sandbox Code Playgroud)
使用 zsh,粘贴的文本会突出显示,这很好。再次,按 Enter 执行命令或按 Control-C 取消。
如果您喜欢 zsh,并希望将其设为默认 shell:
chsh -s /bin/zsh
Run Code Online (Sandbox Code Playgroud)
小智 7
在粘贴之前键入 # 然后粘贴您的行。它不会执行,您可以删除 # 并在修改完成后按 Enter。