Splošno v smislu, da lahko rm zamenjaš za poljubno komando. Recimo da imamo a | b in da a teče dolgo - lahko se odločiš in killaš a, pa bo cela skripta crknila. Moj namen je bil namreč imeti Makefile-like skripto, torej:

set -e
abc
bbc
cbc
...

No in tečno mi je bilo, da takoj ko uporabim pipe, se začnejo exit statusi dejansko ignorirat. Hec tukaj je, da unix ima nekaj "avtomatike" - če pišeš v zaprt fd, ti proces privzeto crkne s signalom SIGPIPE. Ampak, če pa proces pisec umre "nenaravne" smrti (torej exit != 0, signalled...), pa za child procese to izgleda samo kot zaprt stdin. Shell recimo v določenih primerih ročno pobije child procese. Malo nekonsistentno...?

lp
egon

Blaz Podrzaj wrote:
Uff, grdo. Ze moja varianta je grda ampak je definitivno bolj splosna kot tale ;) No, kakor za koga. Pa 'set -e' ti tukaj prav tako nic ne koristi, edino ce
imas naprej v skripti kaksno simpl komando.

lp,B

Quoting Egon Kocjan <[EMAIL PROTECTED]>:

Hm, sem ?e malo razmi?ljal, pa sem zgruntal dokaj splo?no re?itev:

set -e
pid=$$
(rm /kjkjdfkj || kill $pid) | cat

lp
egon


Blaz Podrzaj wrote:
Aha, v bistvu tebe muci tale -e (sem spregledal). Naceloma tale 'rm x' je naceloma "Simple Command" ampak ta bi se morala koncati s control operatorjem. Tvoja se ne, ker se nadaljuje v pipo in to ni vec "Simple Command" ampak je ze "Pipeline" in tukaj ti -e nic ne pomaga. Ce bi delal redirekcijo v file cemir bi se ti rad izognil bi -e funkcioniral ker se redirekcija smatra kot del
"Simple Command".

Torej preostane ti tole spodaj -e pa ti v tem konkretnem primeru ne koristi.

lp,B

Quoting Blaz Podrzaj <[EMAIL PROTECTED]>:

Hoj,

V tvojem drugem primeru teoreticno nic ni crknilo... ti si nekaj naredil in STDOUT tega kar si naredil stocil v cat. Dela! Prvi del pipe ni vrgel nic na STDOUT, drugi del je pa ta nic cisto lepo pozrl in izpljunil dalje kar je OK.

Rabis kvecjemu en pogoj v prvem delu ter 'exit 1' iz skripte.

Tole bi bila "agli" resitev tocno za tvoj primer:

([ -f "xx" ]&&rm xx|cat||exit 1)||echo x

...vse kar je v oklepajih predstavlja tvojo skripto.

lp,B

Quoting Egon Kocjan <[EMAIL PROTECTED]>:

?ivjo

Recimo imam dve skripti:

set -e
rm /kjkjdfkj

$ sh x.sh || echo x
rm: cannot remove `/kjkjdfkj': No such file or directory
x
$

To je ok primer.


Zdaj pa bolj zanimiv primer:

set -e
rm /kjkjdfkj | cat

$ sh x.sh || echo x
rm: cannot remove `/kjkjdfkj': No such file or directory
$

Kako bi naredil, da bi celotna zadeva crknila, kljub temu da je samo en del pipe izraza crknil. Rad bi se izognil pisanju v fajle, itd., torej
nekaj elegantnega. Pipe izrazi naj bi bili poljubno dolgi (ve?krat |)

Lp
egon

_______________________________________________
lugos-list mailing list
[email protected]
http://liste2.lugos.si/cgi-bin/mailman/listinfo/lugos-list




_______________________________________________
lugos-list mailing list
[email protected]
http://liste2.lugos.si/cgi-bin/mailman/listinfo/lugos-list




_______________________________________________
lugos-list mailing list
[email protected]
http://liste2.lugos.si/cgi-bin/mailman/listinfo/lugos-list

_______________________________________________
lugos-list mailing list
[email protected]
http://liste2.lugos.si/cgi-bin/mailman/listinfo/lugos-list




_______________________________________________
lugos-list mailing list
[email protected]
http://liste2.lugos.si/cgi-bin/mailman/listinfo/lugos-list

_______________________________________________
lugos-list mailing list
[email protected]
http://liste2.lugos.si/cgi-bin/mailman/listinfo/lugos-list

Одговори путем е-поште