Příkazový řádek je prima na spoustu věcí. Co byste museli zdlouhavě naklikávat (záměrně neříkám, že složitě), to zde rychle vyřeší jediný příkaz. Má to jednu nevýhodu. Ne všichni si pamatujeme správnou syntaxi.
Já například dodneška neumím použít příkaz find, aniž bych si dohledal jeho zápis. Samozřejmě běžné a jednoduché věci typu df, du -h, cd, balíčkování do taru nebo rozbalování, to si každý zapamatuje. Ale se složitějším zápisem roste nárok na dobrou paměť.
Nebo jiný příklad. U všech webů na Drupalu, které stavím, jsem si nachystal nějaké vlastní příkazy pro terminálový Drush. Používám je při stavbě webu poměrně intenzivně, šetří mi práci. Ale nechci pokaždé vypisovat do příkazového řádku vendor/bin/drush příkaz parametr1 parametr 2.
Asi většina terminálů zná příkaz history. Zobrazí vám několik naposledy zadaných příkazů. To je velká pomoc. Kombinace history | grep příkaz zobrazí z historie seznam volání konkrétního příkazu, resp. povelů, kde se objevuje zadaný řetězec. To je pomoc ještě větší.
Ovšem nedávno jsem narazil na nástroj fzf popisovaný jako command-line fuzzy finder. Nainstalujete jej téměř na jakoukoli platformu (určitě na Linux, macOS a Windows) a vylepšíte si prohledávání historie příkazů naprosto zásadně.
Po spuštění příkazu history | fzf totiž můžete začít prohledávat historii interaktivně. Stačí začít psát část hledaného příkazu.
Fzf samozřejmě není omezený jenom na historii. Samotné spuštění příkazu vám umožní efektivně prohledávat soubory v aktuální složce podle jejich názvu.
V dokumentaci najdete řadu dalších přepínačů a úprav příkazů, takže vám bude například zobrazovat náhledy nalezených souborů nebo barevně rozdělí nalezené výsledky.
Pro mě ale zůstává největším pomocníkem právě pro prohledávání historie příkazů.
💡 A co Ctrl+R? Zkušenější uživatelé samozřejmě znají klávesovou zkratku Ctrl+R, která spustí prohledávání příkazů v terminálu i bez instalace dalšího nástroje. Ale po pravdě, to ovládání mi přijde tak kostrbaté, že dávám raději přednost kombinaci history a grep, resp. nově history a fzf. Zápis hledaného výrazu a zužování výsledků je mi výrazně příjemnější. Ostatně, i pro každodenní práci lze fzf integrovat do shellu.
Tip: jak používám fzf nad SQLite databází
Když jsem se s fzf trochu seznámil, napadlo mě, že by se dal vlastně krásně použít pro vytvoření jednoduchého udělátka na procházení databáze. Mám několik vlastních projektů, které ukládají data do SQLite a občas se mi hodí porovnat reálná data z databáze s tím, co mi ukazuje z části vajbkóděná aplikace.
Následující příklad s fzf a sqlite-utils berte spíše s rezervou a pro inspiraci, není to nic, co bych přeťukával do příkazového řádku, ale mám to naskriptované. Ovšem demonstruje to, že lze snadno zobrazit třeba seznam projektů z databáze, procházet je šipkama nahorů a dolů a v pravé části terminálu pak zobrazovat nějaké naměřené hodnoty pro aktuálně zvolené projekty.
sqlite-utils query var/data/speedy.sqlite \
"select id, name, base_url, active from project order by name" \
--tsv --no-headers |
awk -F '\t' '{
url = $3
if (length(url) > 42) url = substr(url, 1, 39) "..."
printf "%-4s %-24s %-42s %-8s\n",
$1, $2, url, ($4 == "1" ? "ano" : "ne")
}' |
fzf \
--header="ID Název URL Aktivní" \
--border \
--layout=reverse \
--ansi \
--preview-window="right:60%:wrap" \
--bind 'ctrl-r:refresh-preview' \
--preview 'id={1};
printf "\033[1;36mPROJECT DASHBOARD\033[0m\n\n";
sqlite-utils query var/data/speedy.sqlite "
WITH latest AS (
SELECT *,
row_number() over (
partition by form_factor
order by
case status when \"success\" then 0 else 1 end,
fetched_at desc,
id desc
) as rn
FROM measurement
WHERE project_id = $id
AND scope = \"origin\"
AND form_factor in (\"DESKTOP\", \"PHONE\")
)
SELECT
case form_factor when \"DESKTOP\" then \"Desktop\" else \"Mobil\" end as zarizeni,
fetched_at as aktualizace,
source,
coalesce(printf(\"%.0f ms\", lcp_ms), \"–\") as lcp,
coalesce(printf(\"%.0f ms\", inp_ms), \"–\") as inp,
coalesce(printf(\"%.2f\", cls), \"–\") as cls,
coalesce(printf(\"%.0f ms\", ttfb_ms), \"–\") as ttfb
FROM latest
WHERE rn = 1
ORDER BY form_factor
" --table'A takto vypadá výsledek:
Tvůrce webů z Brna se specializací na Drupal, WordPress a Symfony. Acquia Certified Developer & Site Builder. Autor několika knih o Drupalu.
Web Development Director v Lesensky.cz. Ve volných chvílích podnikám výlety na souši i po vodě. Více se dozvíte na polzer.cz a mém LinkedIn profilu.

Přidat komentář