Предотвратить случайное выполнение команд в Linux, если вставить текст, содержащий один или несколько символов возврата

Иногда, если текст, находящийся в буфере обмена, вставляется в оболочку и содержит возвращаемый символ, он будет выполняться, даже если это не было намерением. Иногда даже несколько строк могут быть вставлены по ошибке, а затем могут выполняться непреднамеренные команды.

Я понимаю, что в идеальном мире эти ошибки никогда бы не произошли, но есть ли способ предотвратить это, чтобы избежать риска человеческой ошибки?

3 ответа

То, что вам нужно, называется "вставкой в ​​скобки" - функцией, которая доступна в некоторых оболочках.

Если ваша версия 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

Другой вариант - переключиться с bash на zsh, где вставка в скобках включена по умолчанию. Чтобы заменить текущую оболочку оболочкой zsh:

exec zsh

С zsh вставленный текст выделяется, что приятно. Снова нажмите Enter, чтобы выполнить команду /s, или Control-C, чтобы отменить.

Если вам нравится zsh и вы хотите сделать его оболочкой по умолчанию:

chsh -s /bin/zsh

Если вы используете 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+XCtrl+E ("Редактировать текущую строку") перед вставкой. Это запустит ваш редактор по умолчанию; Вы должны сохранить и выйти, затем вставленные команды будут выполнены.

У меня была та же проблема, но потом я сделал привычку всегда копировать одно слово в буфер обмена после того, как я закончу вставлять. Если вы заставите эту привычку 3-4 раза, то ваши руки будут делать это автоматически. Я никогда не вставлял неправильно с тех пор, как начал эту рутину.

Другие вопросы по тегам