Саме зворотний символ у тексті, який ви копіюєте, викликає автоматичне виконання.
Візьмемо інший приклад, скопіюйте ці рядки відразу і вставте їх у свій термінал:
echo "Hello";
echo "World";
Якщо ви заглянете у свій термінал, ви цього не побачите:
$ echo "Hello";
echo "World";
Ви побачите це (також може бути рядок із заговором World
):
$ echo "Hello";
Hello
$ echo "World";
Замість того, щоб чекати, коли весь вхід буде вставлено, перший рядок виконується (і з тієї ж причини другий рядок може чи не може зробити це також). Це тому, що RETURN
між двома рядками є символ.
Коли ви натискаєте ENTER
клавішу на клавіатурі, все, що ви робите, - це надсилання символу зі значенням ASCII 13
. Цей символ виявляється негайно вашим терміналом, і він знає, що він має спеціальні інструкції для виконання того, що ви ввели до цього часу.
Коли він зберігається на комп’ютері або друкується на екрані, RETURN
символ є таким же, як і будь-яка інша літера алфавіту, цифри чи символу. Цей символ можна видалити із зворотної області або скопіювати у буфер обміну, як і будь-який інший звичайний символ.
Єдина відмінність полягає в тому, що ваш браузер бачить символ, він знає, що замість того, щоб друкувати видимий символ, він повинен поводитися з ним по-різному, і має спеціальні інструкції для переміщення наступного набору тексту вниз до наступного рядка. RETURN
Характер і SPACE
характер (ASCII 32
), поряд з кількома іншими рідко використовуваних символів, відомі як «недруковані символи» з цієї причини.
Іноді, коли ви копіюєте текст з веб-сайту, важко скопіювати лише текст, а не повернення в кінці (а це часто ускладнюється стилізацією на сторінці).
Час експерименту!
Нижче ви знайдете дві команди, які будуть ілюструвати проблему, і які ви можете "практикувати" далі. Запустіть курсор прямо до цього echo
та перетягніть, поки виділення не буде перед стрілкою:
echo "Wait for my signal...";<- End cursor here right after the semicolon
А тепер спробуйте другу команду. Запустіть курсор прямо до цього echo
і перетягніть вниз, поки курсор не буде на другому рядку, але знаходиться прямо перед <-
стрілкою. Скопіюйте його та вставте у свій термінал:
echo 'Go go go!';
<- End cursor here right before the arrow
Залежно від вашого веб-переглядача, можливо, навіть не видно, що вибраний вами текст перейшов через два рядки. Але вставивши його в термінал, ви побачите, що він виконує рядок, оскільки знайшов RETURN
символ у скопійованому тексті.
{
перед вставкою введіть (w / space), а потім закінчіть}
. Це не впливає на роботу вставлених команд, але запобігає виконанню оболонки, поки ви не закриєте блок. Описано тут [ gnu.org/software/bash/manual/html_node/Command-Grouping.html]