Czy jest strona podręcznika dla kolorowych wyników powłoki?


23

Wiesz, że pokolorowane dane wyjściowe są tworzone przez specjalne sekwencje znaków, na przykład:

echo -e "\e[34m Hello\n \e[0m"

Spowoduje to wygenerowanie słowa „cześć” w kolorze niebieskim. Aby to zrobić, musiałem szukać w Internecie i jest to trudne, ponieważ różne źródła mogą mówić coś innego. Myślałem, że muszą być jakieś instrukcje, ale nie mogłem ich znaleźć. Nawet z apropos colorczymś podobnym. Pytanie brzmi - gdzie mogę znaleźć wiarygodne instrukcje?


2
Szukasz dokumentacji na temat kodów ucieczkowych ANSI. (
Zwykle

Zauważ, że niekoniecznie musisz znać te sekwencje specjalne. Kilka powłok (przynajmniej tcsh, zsh, fish) ma wbudowaną obsługę wyjścia w kolorach bez konieczności jawnego pisania tych sekwencji.
Stéphane Chazelas,

Odpowiedzi:


27

Na tej stronie jest zbyt wiele źródeł informacji, by je wymienić:

  • Komenda echo -eużywa rozszerzenia do renderowania \ejako ASCII 27 (ósemkowa 33 lub „\ 033”). Przenośny sposób drukowania tych zastosowań printf(POSIX). Porównaj ze standardowym echo(POSIX).
  • Twój przykład można przepisać jako

    printf "\033[34m Hello\n \033[0m"

  • standardem zmiany koloru jest ECMA-48 (Funkcje kontrolne dla zestawów znaków kodowanych).
  • W ECMA-48, 8.3.117 SGR - WYBIERZ RENDITION GRAPHIC wyświetla listę sekwencji kontrolnych do ustawiania 8 kolorów pierwszego planu i 8 kolorów tła.
  • Zawiera także kody 39/49 „domyślny kolor wyświetlacza (zdefiniowany w implementacji)” i 38/48 „zarezerwowane do przyszłej standaryzacji; przeznaczone do ustawiania koloru pierwszego planu znaków, jak określono w ISO 8613-6 [Zalecenie CCITT T.416]”. Oznacza to, że istnieje rekomendacja innej organizacji, ale nie została (jak dotąd, po 24 latach) częścią standardu.
  • czytając go uważnie, możesz zauważyć, że w wielu miejscach standard jest niejasny, co umożliwia różne interpretacje. Opisuje składnię tych sekwencji kontrolnych, ale nie opisuje ich zachowania . W tym celu należy przejść do dokumentacji odpowiednich terminali.
  • dokumentacja dla xterm znajduje się w Sekwencjach Kontroli XTerm , która zakłada znajomość dokumentacji DEC znalezionej na http://vt100.net
  • w przypadku innych terminali ich strony podręcznika mogą wyliczać elementy sterujące (tak jak w przypadku konsoli Linux w konsoli_kody ).
  • inne terminale dokumentują się jako „xterm”; do dyskusji zobacz xterm FAQ Porównywanie wersji, licząc kontrolki . Na szczęście kontrolki kolorów są w większości kompatybilne (ale zobacz ncurses FAQ Mój terminal pokazuje niektóre kolorowe przestrzenie ).
  • możesz również przeczytać strony podręcznika dla tput, co pozwala na użycie terminfomożliwości w skrypcie powłoki. Twój przykład może zostać przepisany jako

    printf '%s\n' "$(tput setaf 4)Hello$(tput setaf 0)"
    
  • kilka źródeł, takich jak Bash Prompt HOWTO i Advanced Bash-Scripting Guide, wspomina o kolorze, ale (nawet te) z reguły mają luki i przeoczenia i nie są pomocne w odniesieniu do ECMA-48.

  • większość innych źródeł, które znajdziesz z kopią wyszukiwarki internetowej z innych źródeł (takich jak cytowane) itp., i z reguły nie zwracasz uwagi na faktyczny standard.

Odpowiednią sekcją w ECMA-48 wydaje się być 8.3.117 - „SGR - WYBIERZ RENDIĘCJĘ GRAFICZNĄ”. Ma jedyne wzmianki o słowie „niebieski”, a znalezione tam kody działają przynajmniej w moim XTerm.
l0b0,

tak - dodam wyjaśnienie.
Thomas Dickey,

2
To naprawdę świetna odpowiedź - życzę sobie, aby wszystkie odpowiedzi były takie jak twoje
Sergius

1
xterm obsługuje również tryb 256 kolorów, prawdopodobnie jest to udokumentowane w jednym z powyższych podręczników.
sendmoreinfo,

Zobacz wynnnetherland.com/journal/..., aby uzyskać garść przydatnych informacji, w tym pakiet grc, który może wykonywać wszelkiego rodzaju operacje kolorowania za pomocą poleceń.
Joe
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.