Zgodnie z tym postem StackOverflow możliwe jest, że w KornShell pojawi się kolorowy monit. Nie byłem w stanie wymyślić, jak to zrobić. Jestem w stanie użyć koloru:
echo -e "\033[34mLinux\033[00m"
daje niebieski wynik „Linux”, podobnie jak:
printf "\033[34mLinux\033[00m"
Kiedy jednak włączam kody ucieczki do mojej PS1
zmiennej zachęty, nie są one usuwane. Co muszę zrobić, aby uzyskać kolorowy monit? Poza tym, że jestem trochę frajerem dla oka, uważam, że kolorowe podpowiedzi przydają się podczas analizowania wyników.
Musisz wstawić dosłowny znak zmiany znaczenia w
PS1
zmiennej. Ksh88 i klony, takie jak pdksh i mksh (starsze wersje), nie mają dosłownej składni znaków kontrolnych, z wyjątkiemprint
wbudowanego. Mksh rozumie\e
ucieczkę, ale pdksh wymaga kodu ósemkowego\033
.ATT ksh93 wprowadza składnię dosłowną unikającą luzów
$'…'
(dostępną także w mksh od R39b). Możesz użyć znaków odwrotnego ukośnika, aby wstawić znaki kontrolne w tych literałach.źródło
mksh
również wspiera$'…'
- co prawda, ponieważ Dave Korn (Korn w Korn Shell) nalegał, abym go dodał.Używam ich
mksh
dla użytkownikashell
:i nieco inny
shell
dlaroot
:Ponieważ znaki specjalne nie zostały skopiowane, oto pasta do wklejania dla zwykłego użytkownika i użytkownika root.
źródło
W odpowiedziach ludzi dzieje się kilka rzeczy, z których każda wymaga innej składni.
Sekwencje specjalne dla programu terminalowego podane w dokumentacji.
Jak zakodować końcowe sekwencje specjalne w zmiennej PS1, na przykład \ e lub dosłowne escape. To zależy od powłoki.
Jak dodać zmieniające się informacje do monitu, na przykład nazwę hosta, bieżący katalog itp. Zależy to również od powłoki. Może być możliwe użycie specjalnych sekwencji odwrotnego ukośnika, takich jak \ w, dla katalogu roboczego, lub może być konieczne nazwanie zmiennych środowiskowych lub osadzenie wiersza poleceń w ciągu.
Jak powiedzieć powłoce, które znaki drukują, a które nie. Powłoka nie wie, gdzie zaczynają się i kończą twoje sekwencje specjalne. Jeśli powłoka ma edytor wiersza poleceń lub coś podobnego, musi wiedzieć, które znaki są drukowane, aby wiedział, gdzie jest kursor. Bez tego szczegółu monit może wyglądać dobrze, ale edycja może zachowywać się dziwnie.
W bashu wstawiasz \ [przed każdą sekwencją zmiany znaczenia i \] po.
W ksh wybierasz pojedynczy niedrukowalny znak ASCII, który nie może wystąpić nigdzie indziej w ciągu. Na początku łańcucha piszesz ten znak, a następnie znak powrotu karetki ASCII. Następnie piszesz ten sam znak przed i po każdej sekwencji ucieczki. z3ntu wybrał \ a jako znak znacznika.
źródło
Dzięki poprzednim odpowiedziom i innym źródłom udało mi się wymyślić następujące:
Pytanie o powłokę Korna:
Podpowiedź Bash:
Dają one ten sam kolor zachęty (tak, mówię po angielsku Queen;)) w formacie:
Odpowiednikiem DOS (choć nie ma opcji kolorów) jest:
co daje:
„>” Zachowuje „DOSsy” zamiast „nixy” za pomocą „$”, ale jeśli zamiast tego chciałbyś mieć sigil („$”), byłoby to:
Pod warunkiem, że twoje konto logowania ma wymagane uprawnienia, aby „nixies” na stałe poprzedzić je „eksportem”:
i zmień DOSsy na:
lub
źródło