Změna barev v linuxovém shellu

Změna barev v linuxovém shellu
« kdy: 24. 09. 2019, 01:31:02 »
Dobrý večer,

Potřebuji přistupovat k nové pracovní stanici na které je nahraný upravený Debian.
(Stanice je umístěna na lodi a je zakázáno měnit konfiguraci systému)
Terminál v této distribuci má bílé pozadí a šedivý text a opravdu špatně se to čte.

Vytvořil jsem si zástupce pro spuštění Terminálu s jinými základními barvami a konfigurační skripty jsem si chtěl upravit na jinou barvu ale naprosto v tom plavu a vše co jsem znal o PS1 nebo o printf jsem už dávno zapomněl.

Na internetu jsem našel hromadu informací o printf (ale jedná se spíše o mini-tutoriály ze kterých nedokážu pochopit celou syntaxi)

Může mi někdo navrhnout vlastní řešení pro úpravu barev na linuxový bash shell ? (Nějaký základ, černé pozadí a zelený text)
- upravený zástupce
- změna barvy ve skriptu


Jako příklad dám tohle:
Kód: [Vybrat]
printf %b '\e[42m' '\e[8]' '\e[H\e[J'
Nepochopil jsem syntaxi a co jednotlivé hodnoty dělají, kdyby se našel někdo ochotný a dokázal to rozkódovat a vysvětlit.

Jinak většinou (minimálně) používám PowerShell kde je taky printf ale nikdy jsem to nepoužil.
« Poslední změna: 24. 09. 2019, 08:47:50 od Petr Krčmář »


kmarty

  • ***
  • 193
    • Zobrazit profil
Re:printf a syntaxe
« Odpověď #1 kdy: 24. 09. 2019, 02:43:42 »
To jsou ANSI escape kody (viz wiki, i ceska). Printf je jen prostredek jak to tomu terminalu rict (stejnou sluzbu udela i echo -e “...”).

k3dAR

  • *****
  • 2 838
  • porad nemam telo, ale uz mam hlavu... nobody
    • Zobrazit profil
    • E-mail
Re:printf a syntaxe
« Odpověď #2 kdy: 24. 09. 2019, 03:51:51 »
https://askubuntu.com/questions/558280/changing-colour-of-text-and-background-of-terminal
https://stackoverflow.com/questions/4842424/list-of-ansi-color-escape-sequences/33206814

nevim ale zda si terminal nebude barvy nastavovat i tak po svem, co je tam za prostredi? jakej terminal? nelze nastavit ten terminal pres sve menu/nastaveni/vzhled?

kmarty

  • ***
  • 193
    • Zobrazit profil
Re:Změna barev v linuxovém shellu
« Odpověď #3 kdy: 24. 09. 2019, 11:40:51 »
To je fakt. Prvni programek co si hraje z barvami (staci 'ls' s nastavenym LSCOLORS) vyresetuje barvy zpet na default (resp. vseho na default '\x1b[0m') a je tam kde byl:

Ted do jakyho extremu je brany "...je zakázáno měnit konfiguraci systému..." pro zmenu v nastaveni vychozich barev terminalu.

P.S.: '\e', '\x1b' ci '\033' je jedno a to same - znak ESC.
« Poslední změna: 24. 09. 2019, 11:48:39 od kmarty »

Re:Změna barev v linuxovém shellu
« Odpověď #4 kdy: 24. 09. 2019, 13:16:09 »
Je to Debian klasicky s Gnome, nemohu měnit nastavení a i kdybych to udělal nastavení se automaticky resetuje.
(Dále to nehodlám řešit, protože mi to nijak nepomůže)

Používám terminál k ovadaní jiných aplikací takže procházení adresářů a podobných věci dělat nebudu.
Potřebuji pouze poradit s PS1 nebo použít print.

Zatím mi nejvíc pomohlo že vím že se jedná o: ANSI escape code
https://en.wikipedia.org/wiki/ANSI_escape_code
https://misc.flogisoft.com/bash/tip_colors_and_formatting

Pomalu se tím prokousávám, ale více něž soutěž o to kdo mi pošle nejlepší odkaz bych ocenil praktické vysvětlení které by mi pomohlo víc.

Kód: [Vybrat]
printf %b '\e[42m' '\e[8]' '\e[H\e[J'
už vím že:
\e
\033 (osmičkový)
\x1b (hexadecimální)

Už vím že když nahradím 42 za 102 dostanu světelnější odstín zelené.
Vím co dělá "%b" ale nemohu zatím k tomu najít informace a o zbytku zatím nevím nic.


kmarty

  • ***
  • 193
    • Zobrazit profil
Re:Změna barev v linuxovém shellu
« Odpověď #5 kdy: 24. 09. 2019, 15:54:22 »
  • %b u printf
    • man printf pise:
      Citace
      As for s, but interpret character escapes in backslash notation in the string argument. The permitted escape sequences are slightly different in that octal escapes are \0num instead of \num.
  • '\e[42m'
    • dle wiki: '\e[' = CSI (Control Sequence Introducer), 42m = zmena barvy pozadi na zelenou. (Zakladni) barvy jsou 0 az 7 a pricita se 30 pro popredi nebo 40 pro pozadi. 'm' znamena "SGR - Select Graphic Rendition" (silena tabulka vseho moznyho).
  • '\e[8]'
    • manualova stranka pro 'console_codes': Make the current color pair the default attributes.
  • '\e[H'
    • Presune kurzor na 1. sloupec a 1.radek. Uplne je to '\e[radek;sloupecH' - pokud se 'sloupec' a/nebo 'radek' vynecha, pak se pouzije vychozi hodnota 1.
  • '\e[J'
    • Vymaze cast obrazovky od kurzoru po konec. Uplne je to '\e[cisloJ' kde 'cislo' je 0(default kdyz neni uvedeno), 1, 2 nebo 3. Kazdy dela neco jinyho

Vsechno je to na ty, i tebou odkazovany, wiki (teda az na to '\e[8]', to bylo tezsi).

Re:Změna barev v linuxovém shellu
« Odpověď #6 kdy: 25. 09. 2019, 07:39:57 »
Děkuji, tohle mi pomohlo.

Já se zasekl hned na tom přepínači nikde jsem to nemohl najít:
%b           expanduje posloupnosti escapované zpětným lomítkem
                   v odpovídajícím argumentu