Иногда, если текст, который находится в буфере обмена, вставлен в оболочку и содержит символ возврата, он будет выполняться, даже если это не было намерением. Иногда даже несколько строк могут быть вставлены по ошибке, и тогда могут выполняться непредусмотренные команды.
Я понимаю, что в идеальном мире таких ошибок никогда бы не произошло, но есть ли способ предотвратить это, чтобы избежать риска человеческой ошибки?
Если вы используете PuTTY в Windows, вот сценарий AutoHotKey, который определит, пытаетесь ли вы вставить что-то в PuTTY, имеющий один или несколько символов новой строки, и, если да, подтвердит, что вы хотите это сделать.
Совет: вы можете нажать пробел или клавишу ввода на клавиатуре, чтобы просто нажать «Да».
Примечание: этот скрипт использует ctrl + v для вставки в PuTTY, но вы можете заменить ^v
с участием RButton
если вы хотите подключить это к функциональности PuTTY по умолчанию для вставки правой кнопкой мыши.
#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
Использовать Ctrl
+X
Ctrl
+E
(«Редактировать текущую строку») перед вставкой. Это запустит ваш редактор по умолчанию; вам нужно сохранить и выйти, затем вставленные команды будут выполнены.
То, что вам нужно, называется «вставкой в скобки» - функцией, которая доступна в некоторых оболочках.
Если ваша версия bash поддерживает это, вы можете включить его для текущего сеанса следующим образом:
bind 'set enable-bracketed-paste on'
Теперь попробуйте, вставив несколько строк:
echo Hello world
echo Again, I say, hello!
Оболочка распознает, что текст был вставлен (не набран), и ожидает вашего подтверждения. Если все выглядит безопасным, нажмите клавишу Enter. Если нет, нажмите Control-C, чтобы отменить.
Если вы хотите включить вставку в скобках для каждого нового сеанса, добавьте команду в свой файл .inputrc:
cd ~
echo "set enable-bracketed-paste" >> .inputrc
Другой вариант - переключиться с трепать к zsh, где вставка в квадратных скобках включена по умолчанию. Чтобы заменить текущую оболочку оболочкой zsh:
exec zsh
При использовании zsh вставленный текст выделяется, что приятно. Снова нажмите Enter, чтобы выполнить команду / s, или Control-C, чтобы отменить.
Если вам нравится zsh и вы хотите сделать его оболочкой по умолчанию:
chsh -s /bin/zsh
У меня была такая же проблема, но потом я привык всегда копировать одно слово в буфер обмена после того, как закончу вставку. Если вы заставите эту привычку 3-4 раза, то с этого момента ваши руки будут делать это автоматически. Я никогда не вставлял неправильно с тех пор, как начал эту процедуру.