[ NikolaVeber @ 19.11.2002. 07:26 ] @
Pozdrav !

Imam problem oko kreiranja bash scripta koji pokrece g++ kompajler i output smesta u promenljivu.

errormsg=`g++ /root/dir/fajl.cpp`

zanima me da li je moguce da se program pokrene, a da poruku o greski upise samo u promenljivu, a ne da je prikaze u shellu.
Takodje me zanima da li se sa
if [ -n $errormsg ]
moze utvrditi da li je prazna ili ne i kako (probao sam sve kombinacije sa -n i -z , ali nije pokazivalo ocekivane rezultate)...

Hvala !
[ random @ 19.11.2002. 12:55 ] @
Problem je u tome što obrnuti navodnici uzimaju podatke sa stdout fajl deskriptora, a tebi treba stderr (poruka o grešci). Na žalost, mislim da u Bourne shellu ne postoji jednostavan način da se u promenljivu smesti stderr izlaz (ne može se čak ni pajpovati stderr u drugu komandu), tako da je najlakše rešenje da slepiš sve zajedno na stdout.

Code:
errormsg=`g++ /root/dir/fajl.cpp 2>&1`


Ako hoćeš samo stderr, onda bi morao nešto u stilu

Code:
g++ /root/dir/fajl.cpp 2> /tmp/errormsg.$$ \
&& errormsg=`cat /tmp/errormsg.$$` \
&& rm /tmp/errormsg.$$


U C shellu bi to moglo i jednostavnije.

Ovo [ -n $errormsg ] vraća true ako string nije prazan, i radi sasvim dobro, osim ako se desi da je string prazan ;o). Jer onda neće ni biti parametra koji može da se ispituje i komanda će se svesti na [ -n ]. Rešenje je da string staviš među navodnike -- [ -n "$errormsg" ] -- u ovom slučaju će čak i ako je string prazan biti evaluirani prazni navodnici -- [ -n "" ], pa će biti sve kako si naumio.