sa2*_*289 5 shell terminal clipboard
有时,如果剪贴板上的文本被粘贴到 shell 中并且它包含一个返回字符,即使这不是意图,它也会执行。有时甚至可能会错误地粘贴多行,然后可能会运行意外的命令。
我明白在一个完美的世界里,这些错误永远不会发生,但有没有办法防止这种情况发生,以避免人为错误的风险?
您想要的称为“括号粘贴”,这是某些 shell 中提供的功能。
如果您的 bash 版本支持它,您可以在当前会话中打开它,如下所示:
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,其中默认启用括号粘贴。要将当前 shell 替换为 zsh 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)
如果您在 Windows 上使用 PuTTY,这里有一个 AutoHotKey 脚本,它将检测您是否尝试将包含一个或多个换行符的内容粘贴到 PuTTY 中,如果是,将确认您想要这样做。
提示:您可以按空格键或键盘 Enter 键作为按“是”的简单方法。
注意:此脚本使用 ctrl+v 粘贴到 PuTTY 中,但如果您想将其挂接到 PuTTY 的右键单击粘贴默认功能中,则可以替换^v
为。RButton
#ifwinactive ahk_class PuTTY
^v::
var := clipboard
var := RegExReplace(var, "\r\n?|\n\r?", "`n", lineNum)
If(lineNum>0)
{
MsgBox, 4, , There are one or more newlines in what you're pasting, are you sure you want to continue?
IfMsgBox Yes
SendInput {Shift down}{Insert}{Shift Up}
else IfMsgBox No
return
}
else
{
SendInput {Shift down}{Insert}{Shift Up}
}
return
#ifwinactive
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
2074 次 |
最近记录: |