QL.túra

Kulturális smörgåsbord Esterházytól Wass Albertig, a gumicsizmától az iPad-ig, a Teletabiktól Sexpírig, a makrofágtól a mikrokontrollerig, miazmás...

Címkék

2000 (20) 2001 (6) 2002 (16) 2003 (164) 2004 (61) 2005 (40) 2006 (31) 2007 (28) 2008 (33) 2009 (175) 2010 (188) 2011 (201) 2012 (86) 2013 (40) 2014 (36) 2015 (26) 2016 (10) adáshiba (91) android (1) animáció (93) cygwin (3) film (410) gezarol (13) hájtek (159) hangoskönyv (32) ipad (17) klip (12) könyv (191) linux (29) színház (169) vers (17) windows (37) zene (111) Címkefelhő

+jegyzések

Most ...

... múlok .osan

bmi_tiny.png


... hallgatom
Szabó Magda: Régimódi történet
https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcSqTmZEqlCRFgojyt52Q2n_qiMTyVlt-zJu-DpbNKVY6OQbBh4u


... olvasom
Alexander Steele (szerk.): Kezdő írók kézikönyve


... (Kik ezek? Kik ezek az embek? Kik ezek?)
profile for TrueY on Stack Exchange, a network of free, community-driven Q&A sites
free counters

[Hájtek] Két file listázása egyszerre Linuxon (frissítve)

2012.06.05. 11:00 | TrueY | Szólj hozzá!

Címkék: windows linux 2012 cygwin

Sokszor előfordul, hogy egy program debug-olása közben több file is íródik. Jó lenne, ezeket egy képernyőn nézni, hogy ne árasszuk el nyitott ablakokkal a képernyőket. Pl. az Apache httpd2 két file-t ír a /var/log/apache2/ könyvtárba: access.log és error.log. Az első a file kéréseket, a második az esetleges hibákat tartalmazza. Ezeket kellene összefésülni. Lehetőleg bash-ban, hogy ne kelljen nagy C kódokat írogatni.

Némi borzolás után több helyen az exec használatát javasolta a kollektív tudat(alatti). Próbáljuk meg hát ezt az utat. Az exec-nek, ami normál körülmények között a jelenlegi process helyett betölt egy másikat programot és azt futtatja, van bash-ben egy különleges tulajdonsága. Filehandle-ket lehet nyitogatni vele, amit majdan a read -u paranccsal olvashatunk.

cd /var/log/apache2/
exec 5<access.log 6<error.log

while :; do
    while read -u 5 inp; do echo "A:$inp"; done
    while read -u 6 inp; do echo "E:$inp"; done
    sleep 1;
done 
Ez szuperül működik. Bonyolítsuk egy egészen picikét. Jó lenne a különböző file-okból érkező sorokat különböző színekkel kiírni. Próbálkoztam az ncurses könyvtárral, de a "tput setf red; tput setb green" nem működött rxvt (cygwin) alatt. De a direktebb megoldás megy.

echo -e "\e[31;42malma\e[m"Egy piros "alma" szöveget kapunk, zöld háttérrel. A 30..37 a betű, 40..47 háttér. Sajnos nem egy RGB, de a semminél több. Ha esetleg 2 apache virtuális host-ot használunk (egy a 80-as, egy a 8080-as portra teszt környezet gyanánt), akkor a háttér színnel tudjuk megkülönböztetni a teszt környezet sorait.

Persze mondjuk időbélyeget is tehetünk elé, ha nincs a file-ban. Ezt mindenki oldja meg házi feladatként!

Ha zavar, hogy induláskor túl sok sort ír ki, akkor az elöző kódban a while elé beírhatjuk ezt:

while read -u 5 inp; do echo "A:$inp"; done | tail -n 10
while read -u 6 inp; do echo "E:$inp"; done | tail -n 10

Ez mind a két file-ból azt utolsó 10 sort fogja a képernyőre írni. Nem a legszebb megoldás, mert így feleslegesen elindít két process-t. Egy bash-t a while ciklusnak, hogy majd át lehessen az stdout-ját irányítani a tail-re. Ha egy for-ral olvasnánk egy 10 elemű tömbbe ciklikusan, akkor nem kellene ez a két process (azaz összesen 4). Ez is legyen házi feladat.

Mutatkozzunk minden nap!

A bejegyzés trackback címe:

https://qltura.blog.hu/api/trackback/id/tr724083522

Kommentek:

A hozzászólások a vonatkozó jogszabályok  értelmében felhasználói tartalomnak minősülnek, értük a szolgáltatás technikai  üzemeltetője semmilyen felelősséget nem vállal, azokat nem ellenőrzi. Kifogás esetén forduljon a blog szerkesztőjéhez. Részletek a  Felhasználási feltételekben és az adatvédelmi tájékoztatóban.

Nincsenek hozzászólások.
süti beállítások módosítása