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

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

Да, это немного раздражающая функция, потому что иногда это происходит, а иногда нет, очень странно.

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

Это может быть как неловко (публикация бессмысленных комментариев в IRC), так и опасно.

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

решение1

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

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


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

решение2

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

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

решение3

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

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

Если вы используете последнюю версию оболочки 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:

exec zsh

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

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

chsh -s /bin/zsh

решение4

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

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

Связанный контент