Szkriptek: Python, Perl, Bash, ...

Bash script visszatérési érték [MEGOLDVA]

Sziasztok!

A következő lenne a problémám: Java programból hívok egy bash scriptet. A script futtatása után az exitValue() függvénnyel szépen látom, hogy sikeres volt-e a futtatás. A gondom csak az, hogy ez az érték az utolsó sor eredményét adja vissza. Ha mondjuk a script így néz ki:

#!/bin/bash
mkdir /home/users/home21

Akkor ha már létezik a 21-es könyvtár, szépen hibaüzenettel kilép, amit Javaban is megkapok.
Viszont ha a script már két soros (és a 21-es könyvtár szintén létezik):

#!/bin/bash
mkdir /home/users/home21
mkdir /home/users/home21/files

A második sor hibátlanul lefut, és hibakód nélkül tér vissza a futás a Java kódhoz.

Meg lehet az oldani, hogy bármely sornál ahol hiba van, ott kilépjen és ne futtassa tovább a scriptet?
------------------------------------------------------------------------------------------------------
Köszönöm a segítséget és a gyors válaszokat.

Ideális szövegsherkesztö pythonhoz

Sziasztok!

Eddig még nem találtam meg az ideális szövegszerkesztöt. Számomra fontos tulajdonságok:
- szintaxiskiemelés
- kód autómatikus kieészítése
- autómatikus tagolás

Ezek azok amik nélkül már elképzellhetetlen egy fejlesztést segítö szerkesztö. Eddig amiket próbáltam, a következök voltak jobbak:Scintilla, Eclipse PyDev, Vim.
- Scintilla nálam bugos volt, kódkiegészítés sem müködött mindig
- eclipse: túl "nagy", nekem nem kell projekt, meg 5-féle fájlstruktúra. Maga a szövegszerkesztöje ideális lenne
- vim: nekem még mindig túl nehézkes a használata, föleg több fájl egyidejü szerkesztésekor

Nem akarok flame-t, egyszerüen ha megirjátok, h mit használtok (esetleg, hogy miért) és ha még nem ismerem, akkor ki fogom próbálni.

ui.:nem tudok hoszú ö-t, ü-t írni, sorry

python - valtozo nevenek lekerese

Hogy lehet megoldani, hogy konkretan egy valtozo nevet - es nem a tartalmat - kerjem le? Mint ahogy a hibaknal is kiirja, hogy ilyen, meg olyan objektum, valtozo, vagy barmi. Valahogy csak le lehet kerni, hisz az igaz, hogy a valtozo csak egy memoriateruletre mutat, de a programban megiscsak a 'sztringhez' rendelodik a memoriacim... o_O

valtozo = "tartalom"

Ilyenkor "valtozo" igazi tartalma a memoriacim, a memoriacim pedig a "tartalom" helyet jeloli a memoriaban - na en a memoriacimhez rendelt sztringet, tehat a 'valtozot' akarom megtudni. Hogyan?
(valojaban egy konkret objektum nevet akarom megtudni, hogy hibajelzesenel hivatkozhassak ra, de mivel az is valtozo, igy gondolom ugyanolyan modszerrel lehet megtudni a nevet)

find -exec `basename {}` - hogy lehet ilyesmit csinálni?

Nagyon egyszerű dolgot akarok csinálni, bizonyára az orrom előtt van a megoldás, csak mégsem veszem észre.

Szóval segítség!

Van egy könyvtár, amin végig kellene tekerni, és a benne levő fájlokat megetetni egy programmal, és megmondani neki, hogy az outputot milyen fájlnéven várja.

Ez korábban így ment:

for i in /var/lib/amavis/JunkList/cur/*; do
program $i /var/lib/amavis/Junk/old/`basename $i`
done

Ezzel az volt csupán a gond, hogy ha üres az adott könyvtár, akkor a $i az ugye /var/lib/amavis/JunkList/cur/* és a program meg nem kezeli ezt le.

Jó, gondoltam akkor legegyszerűbb lesz find-dal

Valahogy így képzeltem:

find /var/lib/amavis/JunkList/cur -type f -exec program {} /var/lib/amavis/Junk/old/`basename {}` \;

Igen, csak mint kiderült, itt a basename nem csinált semmit, szóval az eredmény egy /var/lib/amavis/Junk/old//var/lib/amavis... stb path lett.

OK, akkor ez:

find /var/lib/amavis/JunkList/cur -type f -execdir echo /var/lib/amavis/Junk/old/{} \;

Ez ezt mondja:
.//var/lib/amavis/Junk/old/egy

find /var/lib/amavis/JunkList/cur -type f -execdir echo /var/lib/amavis/Junk/old/ {} \;
/var/lib/amavis/Junk/old/ ./egy

Eh...

szóval mit kellene ahhoz tennem, hogy a -exec után a {}-ből csak a fájlnév maradjon?

Bizonyára meg lehet oldani, csak nem látom, hogyan. És igen, lehet hogy egyszerűbb lett volna find helyett a for ciklus előtt megnézni, van-e fájl a könyvtárban, de most már a find viselkedése érdekel.

G

Fájlok keresése

Sziasztok!

Lost+found könyvtárban keresgélek mert muszály :-) A fájlnév nem mond semmit, mert #1234567 stb. formátumú. A fájlok eleje viszont tartalmazza a számos összes információt amire szükségem van! Hogyan tudnék fájlokat keresni a fájl tartalma alapján és esetleg további információkhoz jutni a fájl korábbi nevét illetően? Sajnos szorít az idő, de nem konkrét megoldás kellene, hanem olyan segítség, hogy megtanuljam!!! Lehetőleg ne C programot írassatok velem, mert gyenge ismereteim vannak a téren, viszont a bash kitűnő!

Thx
dzsolt

Perl átirányított STDIN

Itt ez a nagyszerű perl program:


#!/usr/bin/perl
while( $input=<STDIN> )
{
    print uc($input);
}

Soronként olvassa STDIN-t, majd a sorokat nagybetűre konvertálva kiírja. Ha parancssorból indítom, jól működik.

Csakhogy a programot egy másik program gyerekprocesszeként akarom használni, ilyenkor az STDIN/STDOUT egy-egy pipe-ba van irányítva. Az a baj, hogy az STDIN olvasásából addig nem jön vissza, amíg a másik oldal (a szülő) le nem zárja a pipe-ot. Nekem ehelyett az kellene, hogy a child processz soronként válaszoljon.

Szerk: Ha a fenti programot kicserélem a C megfelelőjére, ami filedescriptorokon működő read() hívásokkal van megírva, akkor parent és child jól kommunikál. Sejtésem szerint az a baj, hogy a Perl fd-k helyett streameket használ.

rsync shellel

Sziasztok!

Próbálok írni egy shell scriptet ami a következőket csinálja.
1. a /mnt mappába létrehoz az aznapi dátummal egy könyvtárat.
2. felmountolja ahova másolni szeretnék.
3. rsyn másolás
4. umount
5. 1.pontban létrehozottkönyvtár törlése.


#!/bin/sh
mkdir /mnt/`date +%Y%m%d%k%M`

#smbmount //server/megosztott/almappa /mnt/`date +%Y%m%d%k%M` -o credentials=/root/.creds,mask=0660
mount -t smbf //server/megosztott/almappa /mnt/`date +%Y%m%d%k%M` -o credentials=/root/.creds,mask=0660

rsync -atvr /home/user/*.* /mnt/`date +%Y%m%d%k%M`

umount -v /mnt/`date +%Y%m%d%k%M`

rmdir /mnt/`date +%Y%m%d%k%M`

Könyvtárművelet megy, viszont a mount nem. A legeső verziót másik gépen írtam(ubuntu), ez viszont xubuntu.
ubuntun tökéletesen működött,majd áthoztam xubuntura, ott viszont folyton hülyeségeket csinál:

a mountolásra ezt írja:
"tree connect failed: ERRDOS - ERRnosuchshare (You specified an invalid share name) SMB connection failed"

A másik hiba, hogy az rsnyc nem az mnt mappába másolja a dolgokat, hanem a célmappából másolja vissza a /root-ban valami módon létrehozott könyvtárba. Csak azt nem értem miért a root-ban hozta létre a könyvtárat.
a credentials fileban benne van a felhasznalónév, és a jelszó is.

Ha konzolba mountolom ugyanezzel a szintaxissal, ott megy.

Fájl szerver listája

Sziasztok!

Mára el kell készítenem egy listát az egyik hálózati meghajtónk tartalmáról.

Próbáltam már a Kdirstat programot, amely tökéletes lenne csak riport készítéskor nem tünteti fel az utólsó változtatás dátumát.
A durep progival sem volt jó a forma.

Gondoltam megpróbálom "ls -Rlha /konyvtar/" megoldást, amely jó lenne ha fájl név helyett a teljes elérést írná ki

Ez helyett:
/home/samba/group/test/:
total 7.8M
drwxrwxrwx 2 tomi tomi 4.0K 2009-04-02 15:50 .
drwxr-xr-x 55 tomi tomi 4.0K 2009-06-02 15:59 ..
-rwxrwxrwx 1 tomi tomi 34K 2009-04-01 16:39 fajl1.bin
-rwxrwxrwx 1 tomi tomi 60K 2009-04-01 16:39 fajl2.bin

csak ennyit
tomi tomi 34K 2009-04-01 16:39 /home/samba/group/test/fajl1.bin
tomi tomi 60K 2009-04-01 16:39 /home/samba/group/test/fajl2.bin

Probálkoztam awk-val is de ott elakadtam az utolsó oszlop átalakításánál.

Van valakinek tippe????

Célom: Egyik célom egy olyan .txt fájl létrehozása amelyben uid gid méret dátum és fájlnév teljes eléréssel szerepel.