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
~/.inputrcnapíš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_COMMANDnaplní pole se soubory před každým promptem, takže je vždy aktuální, a funkce vPS1obarví 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 programffplaytak 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í
errna jeden řádek, a pak je opravdu psát. S nápovědouusageagetoptsje 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,okainfopřes jednu funkci, která podleFUNCNAMEví, kdo ji volá, avarpro 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á.
- Motivace
00:00:33 - Alias, proměnná, pole
- Zkratky
- Zkratky (
bind,~/.inputrc)00:16:32 - Cyklus for(each)
00:23:34 - Zkratky pro cykly
00:25:16
- Zkratky (
- Funkce
- Funkce v promptu (barva podle návratového kódu)
00:26:45 - Funkce v souboru
00:29:58 - Načtení funkce ze souboru (
source)00:31:16 - Alias, funkce i program (
command)00:33:12
- Funkce v promptu (barva podle návratového kódu)
- Skript
timecode- Zobrazení časového kódu (filtr
drawtext)00:34:19 - Vytvoření skriptu
00:36:23 - Úpravy skriptu (proměnné, velikost písma, kontroly, funkce
err)00:38:08
- Zobrazení časového kódu (filtr
- Skript
short- Úprava videa (
ffmpeg)00:42:37 - Kostra skriptu
00:43:02 - Sdílená knihovna
lib00:45:29 - Nápověda a přepínače (
usage,getopts)00:47:07
- Úprava videa (
- Práce s funkcemi
00:52:02- barevné výpisy na terminál, funkce
err,okainfo00:52:02 - společná funkce
cout, asociativní pole aFUNCNAME00:53:41 - funkce
varpro ladicí výpis proměnných00:55:48
- barevné výpisy na terminál, funkce
Materiály
Repozitář linuxdays-2025 je rozdělený do větví:
main— výsledné skriptytimecodeashorta knihovnalibslides— slidy, každý soubor*.mdodpovídá jednomu slidupresentation— průběh prezentace, stav kódu ke každému slidu zachycují tagy00–45tools— nastavení editoru Pulsar a skripty, které přepínají slidywip— skripty, které se do přednášky už nevešly (například zrychlené video s rozmazáním pohybu)