Fórum Root.cz
Hlavní témata => Software => Téma založeno: Ħαℓ₸℮ℵ ␏⫢ ⦚ » 17. 04. 2020, 22:29:02
-
Pokud pustím příkaz iostat , automaticky ho mám v barvách. Pokud si chci pustit přes watch (šikovná věc na periodické sledování výstupu příkazu), proč musí explicitně být zadaná proměnná pro zapnutí barev (před či po)? (Týká se i příkazu ls, běžně vypisuje barevně, ale přes watch to musí být watch -c ls --color)
watch -c S_COLORS=always iostat
S_COLORS=always watch -c iostat
Podle mě je tam nějaká zvláštní magie jako zjišťování parametrů terminálu (takové ty věci jako že výstup utility htop se přizpůsobí oknu). Napadla mě ještě jiná příčina a sice výchozí proměnné prostředí, které se nepředávají do subshellu.... Co z toho to je?
PS: co znamená "double buffered" IO příkazů (údajně watch, může způsobovat "blikání" ale věřím že to nemá níc společného s VSYNC a double bufferingem u grafických karet
-
Tuším že přes isatty() program zjistí, zda je výstup terminál nebo pipa.
-
[...] proč musí explicitně být zadaná proměnná pro zapnutí barev [...]
protoze ji mas nastavenou na auto, viz:
set | grep ^S_COLORS
-
Spousta aplikací zjišťuje, zda vypisuje na terminál (a pak využívají vlastností terminálu, třeba barvičky), nebo zda vypisuje do roury (pipe), tedy na vstup jiného programu – takovém případě vypisují jen čistý text, protože ten jiný program by byl tím „smetím“ okolo nejspíš zmaten. watch nebo less jsou ty čestné výjimky, které si s výstupem určeným pro terminál poradí. Ale ta vypisující aplikace nemá jak zjistit, kdo je na druhém konci té roury.
-
OK, isatty.