mezery ve jmene souboru a shell interpretace
Vancl Miroslav (QRIS)
Miroslav.Vancl na qris.cz
Úterý Březen 4 10:41:59 CET 2008
Marian Cavojsky napsal:
> for je na toto naozaj nevhodne. Ak potrebujete pre kazdy subor spustit
> jeden prikaz pozrite si v xargs prepinace --replace a --max-args.
>
Cyklus for tady je skutecne nepohodlny ale krkolomne se pouzit da nejak
takhle:
ifs="$IFS"
IFS=$'\n'
for i in `find . -name '* *'` ; do \ls -l "$i" ; done
IFS="$ifs"
Osobne bych radsi nez xargs pouzil cyklus while/read, protoze je
flexibilnejsi a zda se mi prehlednejsi:
find . -name '* *' | while read i ;do ls -l "$i" ; done
M. Vancl
P.S.
Netusite nekdo, proc mi nejde ve vyse uvedenem for cyklu pouzit ls ? Hlasi
mi to chybu "/bin/ls: invalid option --" a netusim proc. Urcite to nejak
bude souviset s IFS ale nevim jak (priznavam, ze dodnes netusim, kdy presne
se IFS uplatnuje, takze vzdycky musim experimentovat).
ls je alias za "/bin/ls $LS_OPTIONS" a LS_OPTIONS je "-a -N --color=tty -T
0"
P.P.S.
Uz to vim: Problem delaji ty mezery v LS_OPTIONS. Retezec se pred volanim
/bin/ls v shellu znovu interpretuje s pozmenenym IFS a jednotlive optiony se
chybne slepi do jednoho argumentu pro ls a ten si s tim nevi rady. Zvlastni
je pro mne to, ze ty mezery v napsanem prikazu se jako oddelovac
interpretuji zrejme jeste pred zmenou IFS.
Takze to jde i s pouzitim aliasu napsat takhle:
ifs="$IFS"
IFS=$'\n'
for i in `find . -name '* *'` ; do
IFS="$ifs"
ls -l "$i" ; done
IFS="$ifs"
howgh
Další informace o konferenci Linux