Правильно, это немного раздражающая особенность, потому что что-то такое происходит, а иногда нет, очень странно.
Я вставляю команду в терминал, чтобы настроить ее аргументы, и иногда она выполняет вторую, когда я ее вставляю. Иногда это не так.
Это варьируется от смущающего (размещение бессмысленных комментариев на IRC) до опасного.
Как я могу отключить эту функцию навсегда? Я никогда, никогда, никогда не хочу, чтобы терминал автоматически выполнялся при вставке в него.
Там нет автоматического выполнения. Вы, вероятно, также копируете разрыв строки (или более) после команды.
Если вы вставляете команду с разрывом, оболочка (командная строка) считает, что вы нажали кнопку прерывания (Enter, Return) самостоятельно.
Этот ответ только объясняет, почему OP получает нежелательное поведение. Однако в другой ответ, есть реальное решение проблемы ОП.
Одно реальное решение - открыть режим редактирования с помощью ctrl-x ctrl-e
, а затем безопасно вставить ваш буфер обмена в выбранный вами редактор (обычно emacs или vim). После того, как вы закончите редактирование команды, сохраните и выйдите, и она запустится в командной строке. Это хорошая привычка для длинных или сложных команд, особенно при вставке хешей коммитов в команды git, и может помочь вам избежать некоторых страшных результатов в долгосрочной перспективе.
Редактор можно изменить, установив переменные VISUAL и EDITOR (они имеют разные значения, см. здесь ).
Перед вставкой введите #, а затем вставьте свою строку. Он не будет выполнен, и вы можете удалить # и нажать Enter, когда изменения будут завершены.
Я использую этот псевдоним для вставки и невыполнения моей команды
alias nonewlinepaste='history -s `xsel -b`; sleep 1; xdotool key Up 1>/dev/null' # xsel ref. https://unix.stackexchange.com/a/96398/17671 # xdotool ref. https://unix.stackexchange.com/questions/267704/command-to-simulate-keyboard-input#comment1038650_267705
Как уже упоминалось, проблема возникает, когда вставленный текст содержит символы новой строки. С учетом этого ваш вопрос более или менее совпадает с этим вопросом о сбое сервера. Другой сайт, поэтому я повторю свой ответ здесь…
То, что вам нужно, называется «вставка в квадратных скобках», функция, доступная в некоторых оболочках.
Предполагая, что вы используете последнюю версию оболочки 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