Когда вы вставляете какую-либо команду в терминал, она иногда автоматически выполняет команду (как если бы была нажата клавиша «Ввод»), иногда нет.
Я использовал Linux целую вечность, вставил тысячи команд в различные консоли на многих дистрибутивах, и я до сих пор не могу сказать, будет ли команда, которую я собираюсь вставить, выполнена автоматически или нет.
Что вызывает это поведение?
{
(w / space) перед вставкой, а затем завершите}
. Он не влияет на работу вставленных команд, но не позволяет оболочке выполнять его, пока вы не закроете блок. Описано здесь [ gnu.org/software/bash/manual/html_node/Command-Grouping.html]Ответы:
Это возвращаемый символ в тексте, который вы копируете, который вызывает автоматическое выполнение.
Давайте возьмем другой пример, скопируем все эти строки сразу и вставим их в ваш терминал:
Если вы посмотрите в свой терминал, вы не увидите этого:
Вы увидите это (также может быть строка с надписью
World
):Вместо ожидания вставки всего ввода выполняется первая строка (и по той же причине вторая строка может или не может сделать это также). Это потому, что
RETURN
между двумя строками есть символ.Когда вы нажимаете
ENTER
клавишу на клавиатуре, все, что вы делаете, это отправляете символ со значением ASCII13
. Этот символ немедленно обнаруживается вашим терминалом и знает, что у него есть специальные инструкции для выполнения того, что вы уже набрали.Когда
RETURN
символ хранится на вашем компьютере или печатается на экране, он похож на любую другую букву алфавита, цифру или символ. Этот символ может быть удален с помощью возврата или скопирован в буфер обмена, как и любой другой обычный символ.Единственное отличие состоит в том, что, когда ваш браузер видит символ, он знает, что вместо печати видимого символа он должен обрабатывать его по-другому, и у него есть специальные инструкции для перемещения следующего набора текста на следующую строку. По этой причине
RETURN
символ иSPACE
символ (ascii32
), наряду с несколькими другими редко используемыми символами, известны как «непечатные символы».Иногда, когда вы копируете текст с веб-сайта, трудно скопировать только текст, а не возврат в конце (и часто это усложняется стилем страницы).
Время эксперимента!
Ниже вы найдете две команды, которые проиллюстрируют проблему и на которых вы можете «попрактиковаться». Начните курсор прямо перед
echo
и тяните, пока выделение не будет прямо перед стрелкой:А теперь попробуйте вторую команду. Начните курсор прямо перед этим
echo
и тяните его вниз, пока курсор не окажется на второй строке, но находится прямо перед<-
стрелкой. Скопируйте его, а затем вставьте в свой терминал:В зависимости от вашего браузера может даже не быть видно, что выбранный вами текст занимает две строки. Но когда вы вставите его в терминал, вы обнаружите, что он выполняет строку, потому что он нашел
RETURN
символ в скопированном тексте.источник
Когда вы выбираете текст, если вы случайно добавили (невидимую) новую строку в конце строки, он будет вставлен в текст. Это одинаково для всех известных мне эмуляторов терминала. Новая строка делает то, что вы называете «проверить».
В некоторых системах (например, в тех, которые используют синхронные терминалы, такие как IBM 3270), Enterключ «проверяет» экран путем копирования всех изменений на хост.
источник
Другие ответы хорошо ответили на вопрос, но я подумал, что я также поделюсь решением для предотвращения случайного возникновения этого случая, если вы используете PuTTY в Windows - см. Https://serverfault.com/questions/731022/prevent-accidental -execution-of-commands-in-linux-if-pasteing-text-содержащий-one для деталей.
источник
Символ новой строки.
источник