Pet, a kedvenc

Pet? Valószínűleg nem sokan hallottatok erről a kis programról. Egy terminálos parancs tároló és indító. A terminálos munka ellen az egyik legnagyobb ellenérv a hosszú és összetett parancsok megjegyzése, begépelése és az ezzel járó hibalehetőség. Más többféle megoldást kipróbáltam, amikor olvastam erről a mini programról.

Mit tud a pet?

Gyakorlatilag nem tesz mást, csak egy adatbázisba tárolja a megadott parancsokat, majd elindítja a kiválasztottat. Ez így nem tűnik sokkal többnek, mint az alias, de több, egyszerűbb és jobban kezelhető. Míg az alias egy parancs rövidítés, meg kell jegyezni az alias nevét, addig a pet egy kereshető adatbázist ad. Míg az alias-t kézzel kell beírni, a pet megoldja, hogy az utolsó parancsot automatikusan beírja az adatbázisba. Bár nem túl nagy feladat az aliasok mentése, a pet a gitlab és a github szinkronizációt alapból ismeri.

A telepítés

A github oldalukon le van írva, de aki Arch-ot használ megtalálja az AUR-ban is. Én a pet-bin nevűt tettem fel, nem építem fel a programot, hanem a kész verziót használtam. Gond nélkül felment, a fzf-et, mint szükséges függőséget fel is pakolta.

Első lépések a pet használatánál

Mivel az oldaluk nagyon jól dokumentált, itt gyorsan haladhatunk. Az első lépés a megfelelő sorok beírása a bash, zsh alapbeállító állományába.

function prev() {
PREV=$(fc -lrn | head -n 1)
sh -c "pet new `printf %q "$PREV"`"
}

Mi is ez a pár sor? Alapvetően egyszerű szerkezetet kapunk, egy un. funkciót hozunk létre. Nem létfontosságú, de igencsak gyorsíthatja a munkát. A funkció egy mini „program”, amivel kiegészíted a shell-t. Itt a neve a prev, amit mint egy parancsot beírsz a terminálba. Az előtte lévő, azaz a legutolsónak kiadott parancsot, összes paraméterével együtt bemásolja a pet adatbázisába. Így nem kell semmi paraméterezett pet parancs, simán csak a prev paranccsal mentheted az adatbázisba. Igen! Ha kipróbálod ne lepődj meg, mert egy Command> Az előző parancsot ide másolja Description> Ide írod a megjegyzést sorokat kapsz. Az első simán kijelzi az előző parancsot, amit mentesz, a másodiknál egy megjegyzést fűzhetsz hozzá. Ami nagyon hasznos, ha sok ilyen mentett parancs lesz majd, mert eligazodsz köztük. Mivel bekéri a Description-t, nem felejted el, és azonnal megtéve már rendezett lesz az adatbázis. A másik, amit én beírtam a zsh.rc-be:

function pet-select() {
BUFFER=$(pet search --query "$LBUFFER")
CURSOR=$#BUFFER
zle redisplay
}
zle -N pet-select
stty -ixon
bindkey '^s' pet-select

Ez kilistázza a már meglévő parancsokat, és a fel/le nyilakkal kiválaszthatod a futtatandót. A funkcióhoz rendelték a ctrl + s kombinációt, így villámgyors a meghívása és a kiválasztás. Másold be, mentsd le, majd indíts egy új terminált. Figyel, hogy eltérő shell eltérő (az oldalukon ott lévő) sorokat kíván!

Pet configure - Edit config fájl

A bekonfigurálása egyszerű. Ha elindítod a pet configure parancsot megnyílik a beállító fájl. Aminek a szabvány helye: ~/.config/pet/, amit simán szerkeszthetsz is. Amit érdemes beállítani a editor = "vim" arra, amit használni szeretnél, én átírtam az nvim-re. Majd a gitlab, github beállítása következik. A kedvenc helyedről beszerzel egy tokent (egy karaktersorozat, kód) és beilleszted a megfelelő sorba. Ha mindent jól tettél a pet sync parancs simán lefut és a kedvenc oldaladra fel is rakta az adatbázis másolatát.

Használata egyszerű

Ha van olyan parancs, ami hosszú, és előreláthatóan többször előkerül, és menteni akarod a prev paranccsal menteni tudod. Beírod a prev és máris kész vagy. A másik parancs mentési lehetőség a pet new !! Azaz a szabályos új mentési parancsot kombinálod a !! azaz „írd be az utolsó parancsot, amit kiadtam” shell rövidítéssel. Miután bekerült az adatbázisba a parancs, és használni akarod, az előbb definiált ctrl + s lenyomásával kapod meg a listát és kiválasztod azt a mentett parancsot, amit használni akarsz. Enter, és be is másolja a parancssorba, de nem futtatja. Így szerkesztheted, ellenőrizheted. Ha már a nyilakkal való navigálás kényelmetlen a sok parancs miatt, kezd el beírni a keresendő szót, szótöredéket… Igen, ezért is érdemes normálisan kitölteni a megjegyzés sort! Ugyanezt éred el a pet exec, vagy a pet-select beírásával.

A pet adatbázis szerkesztése

pet edit a megfelelő parancs, vagy akár az előbb említett könyvtárban a snippet.toml fájl szerkesztésével is megteheted. Egy bejegyzés nagyon egyszerű:

[[snippets]]
escription = "History törlése"
command = "echo \"\" > ~/.zsh_history & exec $SHELL -l"
tag = ["zsh", "history"]

A parancs „neve” amit megadtál, a parancs és ahogy lehet látni tag-eket is adhatsz hozzá. Ezek szerint is lehet keresni az adatbázisban. Ezeket vagy kézzel írod be, vagy a pet new -t paranccsal adod hozzá a mentendő parancsot, és akkor már a tag-re is rákérdez, és rögvest be tudod írni. Akát itt is használható a pet new -t !! forma is, ami gyorsíthatja a kitöltést, hiszen a menendő parancsot már nem kell beírni. Bár több lehetőség is van, de alapesetben a legtöbbször ezek bőven elegendőek. Ha legalább a bemutatott két funkciót beírod, akkor menteni tudsz, keresni, indítani tudsz, ami igen meggyorsítja a munkádat. A többi jönni fog magától.

A pet előnye

Munka közben mentheted, a terminál elhagyása nélkül a hosszú parancsokat. Nem kell megnyitni az aliasokat tartalmazó fájl, nem kell semmi egyebet tenni, csak az általad kedvelt mód elhelyezni az előzőekben futtatott parancsot az adatbázisban. Így nem marad el, nem akadályoz, nem szakítja meg a munkádat. Ami nekem nagyon kényelmes: akár a beállító fájl, akár pedig az adatbázis sima szöveges állomány, ami pet nélkül is megtartja a parancsokat, ha esetleg nem akarod tovább a pet-et használni. Bár szerintem ha kipróbálod, akkor nem akarsz majd megválni tőle :)

Tesztelve: MagyArch, 2021. július.  

Hozzászólások

Köszi, ez hasznosnak tűnik!

Értékelés: 

0
Még nincs értékelve

Köszi, ez hasznosnak tűnik! Ha szóközt írsz egy sor elé, akkor nem menti el? Vagy hogyan lehet rávenni, hogy mondjuk az olyan parancsokat amiben esetleg jelszó vagy más érzékeny adat van ne mentse el?

Köszi, ez hasznosnak tűnik!

Értékelés: 

0
Még nincs értékelve

#1 "Vagy hogyan lehet rávenni, hogy mondjuk az olyan parancsokat amiben esetleg jelszó vagy más érzékeny adat van ne mentse el?"

Ez csak azt menti el, amire utasítást kap, így a jelszavas, vagy egyéb érzékeny adatot tartalmazónál nem adom ki a prev parancsot, és nem lesz mentés. Ez nem olyan mint a history, ami mindent ment. Inkább egy gyűjteménynek mondanám, amibe azt mentem el amit akarok.