Portál AbcLinuxu, 15. července 2025 09:57


Dotaz: Detekce terminálu

3.3.2012 19:24 Romča
Detekce terminálu
Přečteno: 354×
Odpovědět | Admin
Dobrý den, v projektu mám bod:
"Na standardní chybový výstup je zapsáno "$TEST: $RESULT\n", kde: $TEST je cesta adresáře obsahující cmd-given relativní k TEST_DIR (v kanonickém tvaru bez prefixu ./). $RESULT je OK, pokud jsou soubory {stdout,stderr,status}-delta prázdné; v opačném případě FAILED."
-toto mám a pak další bod
Pokud je standardní chybový výstup připojen na terminál, jsou řetězce OK vypisovány zeleně a řetězce FAILED vypisovány červeně.
Nevím, co to přesně znamená a jak to detekovat, resp. jakou zadat podmínku pro barevný výpis. Našla jsem pro testování:
-t fd deskriptor fd je spojen s terminálem
ale nevím, jak to použít, ani jestli je to správné řešení.
Nástroje: Začni sledovat (1) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

3.3.2012 19:28 Romča
Rozbalit Rozbalit vše Re: Detekce terminálu
Odpovědět | | Sbalit | Link | Blokovat | Admin
Zapomněla jsem napsat, že je to v bashi.
3.3.2012 20:47 pavel
Rozbalit Rozbalit vše Re: Detekce terminálu
Pokud není proměnná $TERM prázdná, pak:
bash_prikaz 1> >(while read line; do echo -e "\e[01;32m$line\e[0m"; done) 2> >(while read line; do echo -e "\e[01;31m$line\e[0m"; done)
3.3.2012 19:56 l4m4
Rozbalit Rozbalit vše Re: Detekce terminálu
Odpovědět | | Sbalit | Link | Blokovat | Admin
Je to správné řešení a použiješ to
if test -t 2; then
  # stderr is a tty
else
  # stderr is not a tty
fi
Pokud jde o barvení, tak ho lze udělat snadno za předpokladu dnes běžného terminálu, i.e. použít natvrdo běžné escape sekvence pro barvy. Nebo správně pro všechny terminály, což vyžaduje dotázat se databáze informací o terminálech na vlastnosti toho, do kterého to vypisuje.

Snadné řešení vypadá třeba:
echo $'\e[31mRoses are red\e[0m\n\e[32mMould is green\e[0m'
Správné vyžaduje vzít výstup (např.)
tput fcolor
správně ho rozparsovat, doplnit na vyznačená místa číslo barvy a použít... V shellu dost opruz.
3.3.2012 20:01 Petr
Rozbalit Rozbalit vše Re: Detekce terminálu
Odpovědět | | Sbalit | Link | Blokovat | Admin
Ahoj,

ten test na -t vypada podle manualu vcelku schudne...

... pricemz stdin ma fd = 0, stdout fd = 1, stderr fd = 2 ...

Napr:
if [ -t 1 ]
then
vypis barevne
else
vypis nebarevne ;o)
fi
3.3.2012 20:24 Romča
Rozbalit Rozbalit vše Re: Detekce terminálu
Odpovědět | | Sbalit | Link | Blokovat | Admin
Přesně to jsem si myslela, jen teď nevím, jak otestovat, že to funguje :)
3.3.2012 20:40 Petr
Rozbalit Rozbalit vše Re: Detekce terminálu
Napriklad muzes standardni chybovy vystup presmerovat do souboru (./nazev_tveho_scirptu 2> ./soubor.log)
3.3.2012 21:09 Romča
Rozbalit Rozbalit vše Re: Detekce terminálu
vyborne, to funguje, dík
3.3.2012 20:30 Romča
Rozbalit Rozbalit vše Re: Detekce terminálu
Odpovědět | | Sbalit | Link | Blokovat | Admin
resp. jak docílit toho, že se to nevytiskne barevně

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.