Updated 2023-08-04

Idea programu cmd je umožnit správu a spouštění vlastních příkazů a scriptů.

Program je v rozpracovaném stavu, ovšem měl by být použitelný.

Na co správu příkazů?

Po rozhovoru s kolegy jsem zjistil, že všichni zažíváme podobnou nepříjemnost: máme příkazy, které používáme často, ale nepamatujeme si je. Kolikrát má příkaz divné jméno, nebo divně pojmenovaný přepínač, který je nezapamatovatelný. Řešili jsme to různě:

  • já měl půlku věcí v aliasech, a půlku ve funkcích
  • kolega hledal často používané příkazy pomocí bash-historie,
  • třetí na to samé měl texťák

Pro vyřešení vznikl příkaz cmd (shell-command-manager / shcmdmgr) napsaný v Python3 zamýšlený pro linux, který dovede příkazy uložit, vyhledat, a spustit.

Navíc lze použít i pro ukládání projektových příkazů, takže například pro správu této stránky mám v kořenovém adresáři stránky složku .cmd kde je uložen script deploy.sh a vhodný commands.json. Napsáním cmd deploy se stránka uloží a pushne v gitu, zkompiluje, a nahraje na server. Ovšem cmd deploy funguje pouze, když jsem přeplý do podadresáře projektu, a tak lze v různých projektech nahrávat na server stejným příkazem, ať je způsob libovolný.

Instalace

pip3 install shcmdmgr

Základní použití

Příkaz lze uložit pomocí cmd -s (nebo cmd --save). Například pro uložení lsb_release -a.

$ lsb_release -a
Distributor ID:	Ubuntu
Description:	Ubuntu 20.04 LTS
Release:	20.04
Codename:	focal

$ cmd --save
The command to be saved: lsb_release -a   % tento text byl předvyplněný
Alias: sysversion
Short description: Zobrazí verzi systému

Po uložení lze příkaz vyvolat aliasem

$ cmd sysversion
Distributor ID:	Ubuntu
Description:	Ubuntu 20.04 LTS
Release:	20.04
Codename:	focal

nebo ho vyhledat pomocí cmd -f (nebo cmd --find).

$ cmd --find
========================================
query $ system                            % zobrazí se seznam výsledků hledání (podle regulárního výrazu)
--- 1 ------------------------------
cmd: do-release-upgrade
des: Upgrades the system to the newest released version
--- 2 ------------------------------
cmd: lsb_release -a
des: Shows the system version
========================================
query $ 2                                 % příkaz se spustí zadáním jeho čísla
run command: lsb_release -a
Distributor ID:	Ubuntu
Description:	Ubuntu 20.04 LTS
Release:	20.04
Codename:	focal

Pro úpravu záznamů o příkazech lze spustit cmd -e (nebo cmd --edit), což spustí $EDITOR ./<script_location>/commands.json, nebo tento soubor můžete otevřít a upravit ručně.

$ cmd --edit
% Program v proměnné "$EDITOR" otevře soubor, který vypadá podobně jako následující ukázka.
[
    {
        "command": "lsb_release -a",
        "description": "Zobrazí verzi systému",
        "alias": "sysversion",
        "creation_time": "2020-04-11 00:24:27"
    },
    {
        "command": "do-release-upgrade",
        "description": "Upgraduje systém na nejnovější vydanou verzi",
        "alias": "sysupgrade",
        "creation_time": "2020-04-11 00:25:08"
    }
]

Doplňování

Doplňování je připraveno pro bash a zsh shelly, a musí se zapnout ručně. Zapnutí sestává z přidání řádky do RC souboru.

Správný kód k přidání lze získat spuštěním --completion <shell>. Takže můžeme použít jeden z následujících příkazů, podle našeho shellu.

cmd --completion bash >> ~/.bashrc
cmd --completion zsh >> ~/.zshrc

Historie

Původně, kolem r. 2017, se program jmenoval gen. Idea byla jednoduchá, ovšem nabalilo se na ní několik funkcionalit kolem generování mustru projektů, podobné modernějším scaffolding cli programům pro různé frameworky. Nejasný cíl a špatně udržitelný kód vedl k opuštění, ovšem program jsem denně používal pro spouštění projektově-závislých scriptů. Časem vykristalizovalo, že by byl dobrý ten samý program, s lepší podporou doplňování a helpem, zaměřený pouze pro spouštění vlastních příkazů. Začátkem r. 2020 jsem program celý přepsal z nuly, připravil vydání na pypi server, aby se mohl program instalovat přes pip. Další dění sem napíšu časem …