Zkratka-Alias-Funkce-Skript (v shellu)

Zkratka-Alias-Funkce-Skript (v shellu) Seznam všech příspěvků

Praktická ukázka, jak si zrychlit práci pomocí zkratek, aliasů, funkcí a skriptů v shellu (bash). Tentokrát jsem na linuxové konferenci LinuxDays na ČVUT FIT vynechal teorii ke skriptování v shellu a vrhl se rovnou na psaní kódu.

Motivace je obyčejná: vrátím se z dovolené s fotkami z mobilu, z foťáku a s videi z kamery. Někde je špatně nastavená časová zóna, někde chybí poloha, videa jsou příliš velká a dlouhá, aby se dala publikovat, a chtělo by to náhledový obrázek. Pro pár souborů se to dá udělat čímkoliv, ale u desítek a stovek se vyplatí si práci zrychlit. Postupně jsme tak z ničeho vybudovali jednoduchou knihovnu skriptů pro rychlý střih videí. Předvedené postupy ale lze využít obecně při práci s libovolnými externími programy.

Tentokrát jsem zkusil i nový způsob prezentace: přímo z editoru (IDE), kde vedle slidů běží terminál a slidy se přepínají vlastními skripty. Přednášku díky Strahovskému AVC můžete sledovat ze záznamu.

Hlavní myšlenky

  • Od nejmenšího k největšímu. Alias zkrátí příkaz, proměnná nebo pole si zapamatuje soubory, se kterými zrovna pracuju, zkratka v ~/.inputrc napíše kus příkazu za mě, funkce zvládne i podmínky a cykly, skript přežije i zavření terminálu a knihovna se sdílí mezi skripty.
  • Ať se to děje samo. PROMPT_COMMAND naplní pole se soubory před každým promptem, takže je vždy aktuální, a funkce v PS1 obarví prompt podle návratového kódu předchozího příkazu.
  • Vědět, co se kdy vyhodnotí. Nejdřív se rozvine alias, pak globbing, funkce má přednost před programem a program se stejným jménem pak zavolá command. Alias, funkce i program ffplay tak mohou žít vedle sebe.
  • Skript roste po malých krocích. Po každé úpravě ho otestovat, pevné hodnoty vytáhnout na začátek, kontroly argumentů zkrátit funkcí err na jeden řádek, a pak je opravdu psát. S nápovědou usage a getopts je nový přepínač jen jeden blok kódu a jeden řádek nápovědy.
  • Společné věci do knihovny. Výchozí parametry, kontroly a výpisy patří do souboru lib, který nový skript jen načte (source) a může se hned věnovat své práci.
  • Výpisy pro člověka. Barvy jen tehdy, když výstup jde na terminál, jednotné err, ok a info přes jednu funkci, která podle FUNCNAME ví, kdo ji volá, a var pro ladicí výpis proměnných včetně polí.

Obsah přednášky

Repozitář se slidy, skripty a nastavením

Odkazy vedou na příslušný slide a čas ve videu, kde část začíná.

  1. Motivace 00:00:33
  2. Alias, proměnná, pole
  3. Zkratky
  4. Funkce
  5. Skript timecode
  6. Skript short
  7. Práce s funkcemi 00:52:02
    • barevné výpisy na terminál, funkce err, ok a info 00:52:02
    • společná funkce cout, asociativní pole a FUNCNAME 00:53:41
    • funkce var pro ladicí výpis proměnných 00:55:48

Materiály

Repozitář linuxdays-2025 je rozdělený do větví:

  • main — výsledné skripty timecode a short a knihovna lib
  • slides — slidy, každý soubor *.md odpovídá jednomu slidu
  • presentation — průběh prezentace, stav kódu ke každému slidu zachycují tagy 00–45
  • tools — nastavení editoru Pulsar a skripty, které přepínají slidy
  • wip — skripty, které se do přednášky už nevešly (například zrychlené video s rozmazáním pohybu)