Kiedy wkleisz jakieś polecenie w terminalu, czasami automatycznie wykona ono polecenie (tak jak po naciśnięciu klawisza „Enter”), a czasem nie.
Od wieków używam Linuksa, wkleiłem tysiące poleceń w różnych konsolach na wielu dystrybucjach i nadal nie jestem w stanie stwierdzić, czy polecenie, które zamierzam wkleić, zostanie wykonane automatycznie, czy nie.
Co powoduje takie zachowanie?
{
przed wklejeniem wpisz (w / spacja), a następnie zakończ}
. Nie ma to wpływu na działanie wklejonych poleceń, ale zapobiega wykonywaniu go przez powłokę do momentu zamknięcia bloku. Opisano tutaj [ gnu.org/software/bash/manual/html_node/Command-Grouping.html]Odpowiedzi:
To znak powrotu w kopiowanym tekście powoduje automatyczne wykonanie.
Weźmy inny przykład, skopiuj te linie naraz i wklej je do terminala:
Jeśli spojrzysz na swój terminal, nie zobaczysz tego:
Widać to (może być również powiedzenie linii
World
):Zamiast czekać na wklejenie wszystkich danych wejściowych, wykonywany jest pierwszy wiersz (i z tego samego powodu drugi wiersz może, ale nie musi). Jest tak, ponieważ
RETURN
między dwiema liniami jest znak.Kiedy naciskasz
ENTER
klawisz na klawiaturze, wszystko, co robisz, to wysyłanie znaku o wartości ASCII13
. Ta postać jest natychmiast wykrywana przez twój terminal i wie, że ma specjalne instrukcje, aby wykonać to, co wpisałeś do tej pory.Gdy jest przechowywany na komputerze lub drukowany na ekranie,
RETURN
znak jest jak każda inna litera alfabetu, cyfry lub symbolu. Znak ten można usunąć za pomocą backspace lub skopiować do schowka, tak jak każdy inny zwykły znak.Jedyna różnica polega na tym, że gdy przeglądarka widzi znak, wie, że zamiast drukować widoczny znak, powinien traktować go inaczej i ma specjalne instrukcje, aby przenieść następny zestaw tekstu do następnego wiersza. Z tego
RETURN
powodu znak iSPACE
znak (ascii32
) oraz kilka innych rzadko używanych znaków są znane jako „znaki niedrukowalne”.Czasami podczas kopiowania tekstu ze strony internetowej trudno jest skopiować tylko tekst, a nie zwrot na końcu (i często utrudnia to styl na stronie).
Czas na eksperyment!
Poniżej znajdziesz dwa polecenia, które zilustrują problem, i na których możesz „ćwiczyć”. Rozpocznij kursor tuż przed
echo
i przeciągnij, aż wyróżnienie znajdzie się tuż przed strzałką:A teraz spróbuj drugiego polecenia. Rozpocznij kursor tuż przed
echo
i przeciągnij w dół, aż kursor znajdzie się w drugiej linii, ale znajdzie się tuż przed<-
strzałką. Skopiuj go, a następnie wklej do terminala:W zależności od przeglądarki może nie być nawet widoczne, że wybrany tekst przekroczył dwie linie. Ale kiedy wkleisz go do terminala, przekonasz się, że wykonuje wiersz, ponieważ znalazł
RETURN
znak w skopiowanym tekście.źródło
Jeśli wybierzesz tekst, jeśli na końcu wiersza pojawi się (niewidoczny) znak nowej linii, będzie on wklejany. Jest to spójne we wszystkich emulatorach terminali, które znam. Nowa linia robi to, co nazywacie „sprawdzaniem poprawności”.
W niektórych systemach (takich jak te wykorzystujące terminale synchroniczne, takie jak IBM 3270), Enterklucz „sprawdzałby” ekran, kopiując wszystkie zmiany na hoście.
źródło
Inne odpowiedzi dobrze odpowiedziały na pytanie, ale pomyślałem, że podzielę się również rozwiązaniem zapobiegającym temu przypadkowo, jeśli używasz PuTTY w systemie Windows - patrz /server/731022/prevent-accidental -execution-of-command-in-linux-if-paste-text-zawierajacy-jeden dla szczegolow.
źródło
Znak nowej linii.
źródło