Szkriptek: Python, Perl, Bash, ...

[megoldva] perl késleltetett kiírás

sziasztok!

fura jelenség került elém perl "tanulgatásom" közben, hátha szakavatottak tudnának segíteni a megértésében. (előre bocsátom, hogy elég alap dolgokat ismerek a perl scriptekről, lehet ebből adódik valami elvi hibám). roppant egyszerű scriptet akartam gyártani, amolyan "hogy is kell" címen. egy szál ciklus volt benne (for), abban történt egy kiértékelés a ciklusváltozóra nézve, majd a ciklus végén némi output. mivel lassú volt, ezért a folyamatot is meg akartam figyelni és a ciklusmagba beraktam pár print-et, hogy lássam hol tart épp.

legnagyobb meglepetésemre a printek a ciklus után "egyszerre" jelentek meg. ilyet még nem láttam, ezért próbáltam debugolni, majd másnak is megmutatni (az illető jóval többet programozott, gondoltam hátha lesz ötlete). nem értettük. ezután a sok kísérlet után kerültek bele a printek mellé felhasználói inputok is (STDIN olvasás). innentől a program jól működött. kigyomláltuk az összes "szemetet" (vissza az eredeti kb. 5 soros programhoz!) és továbbra is jól működött a program!

mi lehet az oka annak, hogy a program csak a végén írt ki mindent?? tény, hogy nem vagyok programozó, de egy sima for ciklus, benne if és print nem kéne, hogy ennyire ismeretlen rejtélyt produkáljon :) (gondoltam én...)

a környezet egy win-es gép, perl 5.10valami. a kód kb az alábbi "bonyolultságú volt":


use Net::Ping;
$p = Net::Ping->new("icmp");
$elnek="";
for ($ip = 2; $ip<101; $ip++) {
$host="10.0.0." . $ip;
if ( $p->ping($host, 1)) {
$elnek .= " $ip";
print "Aktiv: $ip\n";
}
}
print $elnek;

eredmény beemelése scriptbe

Jól tudom-e hogy annak a neve kerül előre aki kiadta a who parancsot?
Amennyiben így van akkor szükség volna az eredmény beemelésére a scriptbe.

Jelenleg így tudom meg, hogy ki adta ki a parancsot:

#!/bin/bash
who_file=`mktemp -p /tmp`
who | awk -vRS='\r' '{print $1}' >${who_file}

Nos ennek az awk-nak az eredményét vagyis a felhasználó nevét kellene beimportálnom pont ebbe a scriptbe, amely éppen lekérdezi. Azon belül is természetesen egy változóba.
Lehetséges ez?
Az is lehet hogy nem is kell fájlba importálni?
Ami biztos hogy a source már a script elején foglalt. Esetleg többször is meglehet adni?

(Megoldva) crontab scriptből

Hello mindenki!
Arra keresnék megoldást, hogy miként lehetne egy bash scriptből beexportálni egy dátumot, és egy fájlnevet a felhasználó crontab-jába?
A fájlnév azért lényeges, mert abban van a tulajdonképpeni parancs aminek le kell futnia.
Mivel nagyon hosszú, emiatt a cron kiakad tőle. De fájlból meghívva nincs vele gond.

A jelenlegi script megkérdezi az időt : ÉÉ HH NN ÓÓ PP formában. Jobb nem jutott eszembe.
Már itt elakadtam, mert nem tudom hogy kérhetek be 5 különböző értéket.
A read $1, $2 stb nem segített. Lehet hogy valami zárójelek kellenének? Ennek hol nézhetek utána?
Ráadásul a cronnak pont fordítva kell megadni a dátumokat. A változókkal gondoltam megoldani, de nem jött össze.

A másik meg éppen az a fájl melyet majd meg kell hívnia a cron-nak. Jelenleg így oldottam meg a scriptből.:
touch ${fájl_neve}_cron && chmod 775 ${fájl_neve}_cron
echo "#!/bin/bash" > ${fájl_neve}_cron
echo "a többi dolog" >> ${fájl_neve}_cron

Létezik esetleg elegánsabb megoldás is?

[Megoldva] Bash scripten belül szóközös fájnévre parancsvégrehajtás nem megy

Sziasztok!

Egy menetben szeretnék törölni darabolt rar fájlokat a következő scripttel.


for i in *.rar
do
   echo "$i"
   if rm `echo $i | sed -e 's/.rar/.*/g'`
   then
      echo OK
   else
      exit 0
   fi
done

A futtatásra ezt kapom:
new file.rar
rm: cannot remove `new': No such file or directory
rm: cannot remove `file.*': No such file or directory

Idéző jeleket használva ""


for i in *.rar
do
   echo "$i"
   if rm "`echo $i | sed -e 's/.rar/.*/g'`"
   then
      echo OK
   else
      exit 0
   fi
done

A futtatásra ezt kapom:
new file.rar
rm: cannot remove `new file.*': No such file or directory

Ha kézzel indítom az rm parancsot a parancssorból
rm new\ file.*
Akkor törli a fájlokat.

Ezt is próbáltam


for i in *.rar
do
   echo "`echo $i | sed -e 's/.rar/.*/g;s/ /\ /g'`"
   if rm "`echo $i | sed -e 's/.rar/.*/g;s/ /\ /g'`"
   then
      echo OK
   else
      exit 0
   fi
done

A futtatásra ezt kapom:
new file.*
rm: cannot remove `new file.*': No such file or directory

Mi lehet a megoldás?

Köszi
Levus

Megoldva! bash, bc, magyar numpad...

Help!
Áldja meg a jóisten a magyar szabványt,
amiért a numpadon vessző van tizedespont helyett...:)
Bash scriptben némi KDialog közreműködéssel
a bc-nek kellene inputokat adnom,
numpadon bevitt egész és tizedestört alakú értékeket,
csakhogy a bc nem igazán szereti a magyar szabvány szerinti
tizedesvesszőt, pont kell neki.
Minden használható ötletet köszönettel fogadok...

tail -f mysql [megoldva]

Hogyan lehet ötvözni a tail parancsot egy mysql táblával?
Eddig tail -f paranccsal olvastam az épp aktuális történéseket a logokból.
Kérés volt, hogy a logok ezután sql-ben tárolódjanak. Onnan hogyan tudok így olvasni?

például ennek a lekérdezésnek szeretném látni a frissítéseit online:
echo "select * from access_log_friss order by timestamp desc" | mysql -u squid -p squid

köszi előre is

Munin grafikon háttérszíne

Üdv!

A munin grafikonom háttérszínét szeretném átállítani a default-ról (f3f3f3) másra, konkrétan átlátszóra. Azt is megtaláltam, hogy ehhez az rrdgraph "--color" paraméterét kéne belőni, csak azt nem tudom, hogy ezt merrefelé tehetem meg. Már egy ideje nyúzom a gúglit, de nem jöttem még rá...

Próbálkozott már valaki ezzel? Hogy sikerült összehozni?