Zmień nazwę hosta na kolor

7

Chciałbym się upewnić, że jestem zalogowany do właściwego hosta, mając określony kolor dla każdego hosta. Kopiuję swoje .bashrcpliki 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, .bashrcktó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.

Hatszepsut
źródło
Po prostu napisz caseinstrukcję dotyczącą zawartości hostname(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.
reż
Ponownie, wynik może Ci się nie spodobać, ale haszowanie pierwszych lub ostatnich 3 cyfr adresu IP bezpośrednio do RGB byłoby stosunkowo trywialne.
Tetsujin,

Odpowiedzi:

8

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:

tput setaf $(hostname | sum | awk -v ncolors=$(infocmp -1 | expand | sed -n -e "s/^ *colors#\([0-9][0-9]*\),.*/\1/p") 'ncolors>1 {print 1 + ($1 % (ncolors - 1))}')

Aby to rozbić:

  • tput - wyprowadza ciąg kontrolny terminala
  • setaf- ciąg kontrolny terminala; w tym przypadku,set ANSI foreground
  • $(...) - Zagnieżdżone podstawianie poleceń BASH dla parametru koloru
    • hostname - zdobądź nazwę hosta
    • sum - obliczyć prostą sumę kontrolną dla nazwy hosta
    • awk...
    • -v ncolors=$(...)- ustaw zmienną AWK ncolorsna 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, aby sedskrypt był nieco łatwiejszy
      • sed -n -e "s/^ *colors#\([0-9][0-9]*\),.*/\1/p"- wyodrębnij wartość colorszdolności terminalowej liczby całkowitej
    • 'ncolors>1 {...}'- skrypt awk, który uruchamia {...}kod tylko wtedy, gdy ncolorsjest większy niż 1
      • print 1 + ($1 % (ncolors - 1))- weź absolut $1(pole 1 wejścia, które pochodzi sum, co oznacza $1wartość sumy kontrolnej), znajdź pozostałą część po podzieleniu przez (ncolors - 1)(co powoduje ograniczenie go do zakresu 0przez (ncolors - 2)), a następnie dodaj 1i wydrukuj .
J Earls
źródło
3

Być może zainteresuje Cię to context-color, które opracowałem na podstawie odpowiedzi J Earls: https://github.com/ramnes/context-color

Jest to prosty skrypt, który po uruchomieniu generuje kolor na podstawie skrótu polecenia. Po zainstalowaniu go gdzieś w twoim domu $PATHmożesz zrobić coś takiego .bashrc:

export PS1="$(context-color -p)$PS1\[\e[0m\]"

(gdzie --prompt/-pjest 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ć $CONTEXTzmienne environment ( export CONTEXT="hostname") lub po prostu użyć --context/-copcji ( context-color -c "hostname").

Przykład poniżej:

próbny

ramnes
źródło
Cześć Ramnes; link tylko pytania są zdecydowanie odradzane (nawet jeśli „na podstawie” innej odpowiedzi). Zapoznaj się z zaleceniami dotyczącymi oprogramowania w moich odpowiedziach .
bertieb
Masz rację, dzięki za przypomnienie. Zredagowałem odpowiedź, powinna być teraz lepsza. Powiedz mi, jeśli uważasz, że to wciąż za mało.
ramnes
Dużo ulepszone :) Dodałem też twój fajny gif, mam nadzieję, że nie masz nic przeciwko!
bertieb
Nie ma za co. Skorzystałem z Twojej prośby o edycję, aby edytować również plik README. Dzięki!
ramnes