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

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

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

2
задан 23 October 2015 в 01:37
4 ответа

Если вы используете 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
3
ответ дан 3 December 2019 в 10:01

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

-1
ответ дан 3 December 2019 в 10:01

Используйте Ctrl + X Ctrl + E («редактировать текущую строку») перед вставкой. Это запустит ваш редактор по умолчанию; необходимо сохранить и выйти, после этого вставленные команды будут выполнены.

2
ответ дан 3 December 2019 в 10:01

То, что вам нужно, называется «вставка в квадратных скобках» — функция, доступная в некоторых оболочках.

Если ваша версия 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, чтобы выполнить команду/команды, или Control-C, чтобы отменить.

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

chsh -s /bin/zsh
4
ответ дан 18 June 2020 в 05:16

Теги

Похожие вопросы