Chciałbym się upewnić, że jestem zalogowany do właściwego hosta, mając określony kolor dla każdego hosta. Kopiuję swoje .bashrc
pliki do różnych hostów i edytuję je w innym kolorze dla każdego z nich.
Jednak nie chciałbym ręcznie edytować koloru na każdym hoście, ale zamiast tego automatycznie wypełniać kolory mojego monitu bash na każdym hoście, wyróżniając jeden dla każdej nazwy hosta.
Wyobrażam sobie polecenie, .bashrc
które pobiera nazwę hosta, zmienia go w unikalny kolor i ustawia jako kolor zachęty.
Pytanie: Jak mogę zmienić nazwę hosta na kolor w bash?
Może nawet osądzić zestaw rozsądnych kolorów na podstawie końcowego koloru tła.
case
instrukcję dotyczącą zawartościhostname
(co oznacza, że musisz raz edytować plik .bashrc z wpisem dla każdego hosta, ale potem możesz skopiować go do wszystkich hostów). Dokonanie „rozsądnego” wyboru automatycznie nie jest trywialne (jakie kolory dobrze wyglądają na tym tle, na którym jest sztuka) i prawdopodobnie nie polubisz wyniku. Ale oczywiście możesz w jakiś sposób zaszyfrować nazwę hosta i użyć jej jako koloru.Odpowiedzi:
może nie uzyskać „ładnego” koloru na podstawie tła, ale powinno działać, zakładając, że domyślnym kolorem tła jest zawsze kolor
0
:Aby to rozbić:
tput
- wyprowadza ciąg kontrolny terminalasetaf
- ciąg kontrolny terminala; w tym przypadku,set ANSI foreground
$(...)
- Zagnieżdżone podstawianie poleceń BASH dla parametru koloruhostname
- zdobądź nazwę hostasum
- obliczyć prostą sumę kontrolną dla nazwy hostaawk
...-v ncolors=$(...)
- ustaw zmienną AWKncolors
na wartość podstawienia polecenia w ciągu$(...)
infocmp -1
- wyświetla informacje o terminalu o bieżącym typie terminala z 1 parametrem na linięexpand
- rozwiń tabulatory do spacji, abysed
skrypt był nieco łatwiejszysed -n -e "s/^ *colors#\([0-9][0-9]*\),.*/\1/p"
- wyodrębnij wartośćcolors
zdolności terminalowej liczby całkowitej'ncolors>1 {...}'
- skrypt awk, który uruchamia{...}
kod tylko wtedy, gdyncolors
jest większy niż 1print 1 + ($1 % (ncolors - 1))
- weź absolut$1
(pole 1 wejścia, które pochodzisum
, co oznacza$1
wartość sumy kontrolnej), znajdź pozostałą część po podzieleniu przez(ncolors - 1)
(co powoduje ograniczenie go do zakresu0
przez(ncolors - 2)
), a następnie dodaj1
i wydrukuj .źródło
Być może zainteresuje Cię to
context-color
, które opracowałem na podstawie odpowiedzi J Earls: https://github.com/ramnes/context-colorJest to prosty skrypt, który po uruchomieniu generuje kolor na podstawie skrótu polecenia. Po zainstalowaniu go gdzieś w twoim domu
$PATH
możesz zrobić coś takiego.bashrc
:(gdzie
--prompt/-p
jest przełącznik, więc kolor jest zastępowany monitami, a\[\e[0m\]
sekwencja zmiany znaczenia resetuje kolor)Domyślnie polecenie użyte do wygenerowania skrótu to
whoami; hostname
. Jeśli chcesz tylko zmienić kolor zgodnie z nazwą hosta, możesz zmienić$CONTEXT
zmienne environment (export CONTEXT="hostname"
) lub po prostu użyć--context/-c
opcji (context-color -c "hostname"
).Przykład poniżej:
źródło