bash for terminator

Pavel Kankovsky peak na argo.troja.mff.cuni.cz
Úterý Říjen 24 11:32:49 CEST 2000


On Tue, 24 Oct 2000, Míla Kuchta wrote:

> > Je nejak nutne pouzivat for? Neni lepsi
> >     find -print0 | xargs -0
> 
> Tady neni kam soupnout podminku.

Musi se to udelat rafinovane:

find ... -print0 | xargs -0 sh -c '
  for name in "$@"; do
    ...
  done
' fake-arg0

(ten fake-arg0 je tam schvalne, aby se argumenty od xargs strkaly od $1
a ne od $0...jestli mi nekdo tu anomalii -- totiz, ze "sh -c 'echo 
$0' x y" vraci "x" -- vysvetli, budu rad)

> > pripadne
> >     find | while read name; do
> >         frobnicate $name
> >         ...
> >     done

Tohle mimochodem take neni odolne proti jmenum s mezerou
resp. tabelatorem (kolem $name nejsou uvozovky) a jeste to muzou zblbnout
jmena s backslashem (melo by se spravne pouzivat read -r).

I kdyz absence -r u read by mozna slo vyuzit k tomu, aby se osetrily ty
konce radek. :)

> Tohle sice jde, ale ja chtel spis vedet, jestli existuje nejaka moznost,
> jak to foru podstrcit.

Jak jiz nekdo zminoval, for by mel pouzivat $IFS, nicmene env. promenne
jsou ceckove stringy, a tudiz se obavam, ze nelze vyjadrit pozadavek, ze
terminatorem ma byt znak '\0'.

--Pavel Kankovsky aka Peak  [ Boycott Microsoft--http://www.vcnet.com/bms ]
"Resistance is futile. Open your source code and prepare for assimilation."



Další informace o konferenci Linux