Pipe – nagyon egyszerűen

Egy viszonylag szűk körben érdekes programot mutatok ma be. Aki használt már pipe-t, azaz csővezetéket, annak lehet ez érdekes. Mi is az a pipe, csővezeték? Ha egy parancs kimenetét, eredményét nem a monitorra, vagy egy állományba írjuk ki, hanem rögvest egy másik parancs kezdi feldolgozni. Tipikus megoldás egy szöveg feldolgozásnál, amikor az egyik parancs beolvassa a szöveget, a másik kikeresi a megfelelő sorokat. A következő sorba rendezi, majd azután kicseréljük a megfelelő részt, Sablonosan így néz ki: prarncs1 | parancs2 | parancs3 | …. parancsN Praktikus, gyors és a feldolgozási sort egyszer kell összerakni, majd az automatikusan elvégzi a feladatát, adja egymás utáni parancsoknak a munkát. Mi ezzel a gond? A haladó felhasználónak semmi, hiszen minden parancsot megfelelően fel tud paraméterezni, az esetleges cserélendő részeket, vagy egyéb feladatokat akár regex-ekkel is meg tud adni. De egy kezdő, vagy az adott témában járatlan már nehézségbe ütközhet. Ha csak az egyik parancs kimenete, eredménye eltér az elvárástól, akkor az egész sor hibás lesz, a végén nem várt eredményt kapunk. Erre pedig nagy az esély, hiszen a Linux parancsok jellemzően elvárják a pontos paraméterezést, ha regex-eket is használunk, akkor is sok a hibázási lehetőség. Amikor a torrent fájlokat próbáltuk kiszedni egy oldal forráskódjából, akkor is belefutottunk egy ilyen példába. Érdemes azt a bejegyzést is átnézni, mert az ottani megoldás nagyon jó példa a következőkre.

Mit tehetünk a hibák kiküszöbölésére?

A fenti torrentes megoldásban azt tettük, hogy minden parancs kimenetét egy fájlba irányítottuk, azt megnéztük, és lépésenként dolgoztuk fel az adatokat. Ez nagyon kényelmes, hiszen minden kimenetet ellenőrizni tudtunk, majd csak azután kapta meg a következő sort a script, ha az előzővel elégedettek voltunk. Jó, kényelmes, de nem használtuk ki a pipe adta röptében való feldolgozást. A haladóbb megoldás nagyon hasznos, és sokan ezzel élnek. Ha a fenti „beolvas, keres, rendez, cserél” példánál maradunk, akkor hogyan is járunk el a hibakeresésnél? Kiadjuk a beolvasási parancsot (cat akármi) majd az a monitoron megnézzük, hogy jól végezte el. Majd ha a kimenet, a monitorról leolvasható szöveg nekünk megfelel, akkor megyünk tovább: begépeljük a cat akármi | grep amitakarsz és megnézed a monitoron a kimenetet, vagy ha hosszabb, és alaposabb elemzést kíván, akkor egy fájlba irányítod át: cat akármi | grep amitakarsz > idebeleirjad.txt És így tovább, és így tovább…

Egy jobb megoldást kínál a Ultimate Plumber

Mi lenne, ha valami terminálszerűségben nem kellene újra begépelni a parancsot, ha egy paramétert, szabályos kifejezést változtatsz, akkor élőben, azonnal látnád a változást a kimenetben? Majd ha jó, akkor csak lépnél tovább, építve a csővezetéket? Majdnem interaktívnak is hívhatnánk a Ultimate Plumber által kínált lehetőséget! A telepítése egyszerű (Arch alatt up néven keresd), ha pedig nincs a te kedvenc disztribúciód tárolójában, akkor a Ultimate Plumber github oldalán megtalálod.

A használata nagyon egyszerű, példát az oldalukon találsz. Röviden az első parancsot nem a második parancsba irányítod át, hanem az up-hoz, azaz így néz majd ki a fenti példánk: cat akármi | up Máris beléptetted magad az up programocskába, a terminálban látod a cat akármi | sor alatt a parancs kimenetét, és gépelheted is a grep amitakarsz következő parancsot.

Folyamatosan látod az eredmény. Majd ha elégedett vagy vele, azt kereste ki, ami neked kellett, léphet tovább, begépeled a | jelet és a következő parancsot, paraméterezed, látod az élő, valós kimenetet, majd ha elégedett vagy vele, akkor | és jöhet a következő parancs….

A kipróbálásra van példa az oldalukon, ha azon végiglépkedsz, máris ráérzel a lehetőségre. Ha eljutottál a kész csővezetékhez, és azt meg szeretnéd tartani, akkor egy crtl+x után mentéssel kilépsz az up-ból, és kapsz egy up1.sh fájlt, amiben ott lesz a kész pipe sor. Mentés nélkül a megszokott ctrl+c adja a kilépést.

Bár a Ultimate Plumber oldalán is írják, de én is kiemelem: csak odafigyelve használd, nem törlési, felülírási, destruktív parancsokkal kellene ezt próbálgatni.

Jó csővezeték szerelést!

A programot 2020. áprilisában próbáltam ki.

Ez is a blogomban jelent meg (magyarlinux.hu), vedd figyelembe, hogy nem mindig van időm ide is átrakni a bejegyzést!