Escape sekvence?

Možná jste o nich slyšeli, možná ne. Pokusím se vám zde představit escape sekvence, které zřejmě nepoužijete příliš často a to ty, které vám umožní trochu oživit konzoli.

Barvy v mém terminálu
Barvy v mém terminálu

Na obrázku vidíte malou tabulku, která zachycuje barvy na mém terminálu. Vytvořil jsem jí pomocí jednoduchého skriptu. Řádky zachybují barvy textu a sloupce barvy pozadí, výsledná kombinace je pak zobrazena v místě, kde se daný řádek protíná se sloupcem.

Předem bych rád podotkl, že používám Arch linux a nevím zda je to v jiných distribucích naprosto stejné. Změníme si barvu textu třeba na oranžovou a necháme si černé pozadí. Takže do terminálu napište

echo -e "\e[33;40m"

Nyní máme oranžový text s černým pozadím, tedy za předpokladu, že máte barevný terminál a že vám barvy zobrazuje stejně jako mě.

Tak si to trochu popíšeme, ne? echo je program, který nám umožní vypsat text na standardní výstup, spouštíme ho s parametrem -e, který nám umožní používat escape sekvence. Uvozovky nám ohraničují text. Textem v prvním příkladě je escape sekvence, která nastaví požadovanou barvu. 

Escape sekvence je uvozena pomoci ESC[, což je v našem případě \e[, když se podíváte do dokumentace programu echo, uvidíte tam někde, že \e je escape.

man echo

Barvičky samozřejmě nejsou jediná věc, která se dá s escape sekvencemi dělat. Můžeme se posunout například o 5 řádků nahoru s kurzorem. A teď si ukážeme jak na to.

echo -e "\e[5A"

Na to samozřejmě musíte mít 5 řádků místa. Ty získáte třeba tak, že si vypíšete dmesg.

Tak, to by byl takový malý úvod do escape sekvencí v terminálu.

Minutka a BASH

Opět jednoduchý BASHový script. Tentokráte najde soubory ve složce a spočítá jejich velikost. Syntaxe příkazu je jednoduchá

./nazevSkriptu [Slozka]

pokud neni uvedena Slozka pouzije se aktuální. Opět psáno na Debianu.

#! /bin/bash
velikost=`ls -l $1 | awk '\
BEGIN {souboru=0; velikost=0;jednotky="B"}\
/^-/{ souboru=1+souboru; velikost=velikost+$5;}\
END {\
if(velikost > 1024) {jednotky="kB";velikost=velikost/1024};\
if(velikost > 1024){jednotky="MB";velikost=velikost/1024};\
if(velikost > 1024){jednotky="GB";velikost=velikost/1024};\
printf "Ve slozce je %s souboru o celkove velikosti: %.2f %s", souboru, velikost, jednotky;}'`
echo $velikost;