Kiedy naciskam ukośnik \, pojawia się >
symbol (większy niż). Co to znaczy?
command-line
bash
Curiouskangaroo
źródło
źródło
Odpowiedzi:
Ilekroć korzystasz z wiersza polecenia, może wystąpić wystąpienie, kiedy musisz uruchomić polecenie, które jest bardzo długie. Tak więc chcesz podzielić polecenie na wiele wierszy dla lepszej czytelności i zrozumienia. Ale jeśli użyjesz nowego znaku linii, który jest wpisany Enter, powłoka pomyśli, że jest to nowe polecenie. Używasz więc
\
znaku nowej linii.Zasadniczo polecenia lub skrypty bash są „interpretowane”, tj. Wykonywane wiersz po wierszu. Każda nowa linia oznacza początek nowego polecenia. Po naciśnięciu przycisku w terminalu Enterpojawi się monit o uruchomienie nowego polecenia. Tak więc nowa linia musi zostać „zmieniona”. Wpisanie,
\
po którym następuje, Enterpozwala podzielić bieżące polecenie na wiele wierszy, aby powłoka nie myślała, że jest to nowe polecenie, ale kontynuacja poprzedniego polecenia.>
jest niczym innym jak monitem o wprowadzenie następnego wiersza polecenia.Na przykład:
jeśli chcemy zainstalować wiele pakietów, polecenie będzie podobne
Ale czasami sprawia to, że polecenie jest zagracone. Możemy więc użyć znaku
\
następującego Enter(znak nowej linii)źródło
$PS1
i$PS2
zmienne. Zobacz stronę podręcznika użytkownika bash, aby poznać format, i użyj,echo "'$PS2'"
aby wyświetlić bieżące ustawienie.Znak odwrotnego ukośnika (
\
) jest używany jako znak ucieczki w powłoce. Jeśli użyjesz go jako ostatniego znaku w wierszu, ucieka on od nowej linii, więc możesz kontynuować polecenie w następnym wierszu zamiast go kończyć. Wskazuje na to>
monit w Bash.Przykład:
Aby
\
podać literał swojemu poleceniu, musisz uciec przed nim, używając innego odwrotnego ukośnika:źródło
[dodając (zbyt długą / złożoną) odpowiedź, ponieważ pozostałe 2 nie wspominają o wyglądzie „>” ... tzn. nie wspominają o PS2]
Wpisano: \Enter: the \mówi do powłoki po prostu wyjścieEnter jako literral charakteru zamiast interpretowania go jak zwykle (Dlatego shell „przechodzi do następnego wiersza” zamiast zakończenia bieżącego wiersza poleceń i interpretacji, chyba że są w niektórych. inne konstrukty, takie jak heredoc, pętla for itp.).
W związku z tym terminal interpretuje \Enterjako: „przejdź do następnego wiersza” (bez rozpoczynania interpretacji polecenia), a zatem terminal pozwala teraz wprowadzić drugi wiersz polecenia wieloliniowego, a aby był bardziej widoczny, wyświetla
$PS2
treść ( nazywany monitem PS2 ) w każdej kolejnej linii.PS2 zmienna jest zazwyczaj definiowane domyślnie jako:
PS2="> "
a można reprezentują np zmieniać swoich ~ / .bashrc przedefiniować go jak chcesz (biorąc pod uwagę, że to powinno imo, unikać zawierające niebezpieczne znaki, takie jak>
czy;
i powinien pomóc albo wyraźnie widać, że jest to multilinii polecenia ale wyłączenie to multilinii treści (npPS2="#cont#"
) lub pozwala łatwo skopiować / wkleić je z jak najmniejszym wpływie na swoich liniach jak to możliwe (ex:PS2=" "
)Co, nawiasem mówiąc, jest imo złym domyślnym, ponieważ może bardzo dobrze doprowadzić do usunięcia niektórych ważnych poleceń binarnych w niektórych przypadkach.
Możesz zmienić definicję PS2, aby była czymś innym (lubię: PS2 = "", na przykład), aby polecenia wielowierszowe można było łatwo kopiować / wklejać bez obawy:
Na przykład załóżmy, że masz polecenie, które zaczyna być dość długie (i może spasować na ekranie, jeśli twój terminal nie jest wystarczająco szeroki):
Jeśli polecenie wygląda na zbyt długie (i zawija się), możesz podzielić je wizualnie na 2 linie, wybierając gdzie (kiedy) chcesz przejść do następnej linii, wstawiając: \Enterw odpowiednim miejscu:
Używając domyślnego PS2, powłoka dodała „>” przed „/ etc / someimportantfile” .. więc jeśli skopiujesz / wkleisz te 2 linie w innym terminalu, ich działanie będzie zupełnie inne: zamiast grepowania do 4 plików, grep jest tylko przechodzenie do pierwszych 3 plików, a wyjście grep zastępuje zawartość czwartego pliku (/ etc / someimportantfile)!
Aby uniknąć tych problemów (i wielu innych): możesz na przykład zdefiniować:
PS2=" "
aby polecenia wieloliniowe były czystsze i łatwiejsze do kopiowania / wklejania:Zwróć uwagę, że tym razem / bin / somecommand po prostu przesuwa o 2 spacje w prawo i nie wstawiono żadnego „>”, dzięki czemu możesz bezpiecznie skopiować / wkleić to 2-liniowe polecenie.
PS2 jest również używany w pętlach „for” „while” itp., A zdefiniowanie go jako „” jest dla mnie także lepsze w tych.
źródło