Остановить автоматическое выполнение терминала при вставке команды

Правильно, это немного раздражающая особенность, потому что что-то такое происходит, а иногда нет, очень странно.

Я вставляю команду в терминал, чтобы настроить ее аргументы, и иногда она выполняет вторую, когда я ее вставляю. Иногда это не так.

Это варьируется от смущающего (размещение бессмысленных комментариев на IRC) до опасного.

Как я могу отключить эту функцию навсегда? Я никогда, никогда, никогда не хочу, чтобы терминал автоматически выполнялся при вставке в него.

27
задан 15 November 2013 в 06:48

5 ответов

Там нет автоматического выполнения. Вы, вероятно, также копируете разрыв строки (или более) после команды.

Если вы вставляете команду с разрывом, оболочка (командная строка) считает, что вы нажали кнопку прерывания (Enter, Return) самостоятельно.


Этот ответ только объясняет, почему OP получает нежелательное поведение. Однако в другой ответ, есть реальное решение проблемы ОП.

0
ответ дан 15 November 2013 в 06:48

Одно реальное решение - открыть режим редактирования с помощью ctrl-x ctrl-e, а затем безопасно вставить ваш буфер обмена в выбранный вами редактор (обычно emacs или vim). После того, как вы закончите редактирование команды, сохраните и выйдите, и она запустится в командной строке. Это хорошая привычка для длинных или сложных команд, особенно при вставке хешей коммитов в команды git, и может помочь вам избежать некоторых страшных результатов в долгосрочной перспективе.

Редактор можно изменить, установив переменные VISUAL и EDITOR (они имеют разные значения, см. здесь ).

0
ответ дан 15 November 2013 в 06:48

Перед вставкой введите #, а затем вставьте свою строку. Он не будет выполнен, и вы можете удалить # и нажать Enter, когда изменения будут завершены.

0
ответ дан 15 November 2013 в 06:48

Я использую этот псевдоним для вставки и невыполнения моей команды

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
0
ответ дан 21 January 2020 в 04:55

Как уже упоминалось, проблема возникает, когда вставленный текст содержит символы новой строки. С учетом этого ваш вопрос более или менее совпадает с этим вопросом о сбое сервера. Другой сайт, поэтому я повторю свой ответ здесь…

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

Предполагая, что вы используете последнюю версию оболочки 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
11
ответ дан 18 June 2020 в 05:58

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

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