Kiedy naciskam ukośnik \, pojawia się >
symbol (większy niż). Co to znaczy?
Kiedy naciskam ukośnik \, pojawia się >
symbol (większy niż). Co to znaczy?
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
$ sudo apt install [package1] [package2] [package3] ...
Ale czasami sprawia to, że polecenie jest zagracone. Możemy więc użyć znaku \
następującego Enter(znak nowej linii)
$ sudo apt install [package1]\
> [package2]\
> [package3]\
> ...
$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:
$ echo A\
> B
AB
$
Aby \
podać literał swojemu poleceniu, musisz uciec przed nim, używając innego odwrotnego ukośnika:
$ echo \\
\
$
[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 (np PS2="#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):
grep -i "something" /some/file /another/file /3rd/file /etc/someimportantfile
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:
grep -i "something" /some/file /another/file /3rd/file \
> /etc/someimportantfile #warning, "> " was inserted by the shell and this changes everything !
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:
grep -i "something" /some/file /another/file /3rd/file \
/etc/someimportantfile #now only 2 spaces were inserted, without changing the grep's actions!
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.