OVH Cloud OVH Cloud

Pb en Shell script

6 réponses
Avatar
frederic
Comment faire pour que chaque indice du tableau LIST correpondent
à un chemin et non pas à un caractère.

j'ai:

LIST=`find /usr/local/share/texmf -type f -name "*.dvi" -print` si
j'évalue: echo ${LIST[0]} j'ai / ; echo ${LIST[1]} u etc. J'ai bien
essayé de modifier la valeur de IFS en IFS='^.*$' mais cela ne change
rien. Une idée ? PS: Je travail avec le zsh.

Frédéric

6 réponses

Avatar
Pascal Bourguignon
writes:

Comment faire pour que chaque indice du tableau LIST correpondent
à un chemin et non pas à un caractère.

j'ai:

LIST=`find /usr/local/share/texmf -type f -name "*.dvi" -print` si
j'évalue: echo ${LIST[0]} j'ai / ; echo ${LIST[1]} u etc. J'ai bien
essayé de modifier la valeur de IFS en IFS='^.*$' mais cela ne change
rien. Une idée ? PS: Je travail avec le zsh.


Il faut mettre des parentheses pour avoir des tableaux.
(en bash; c'est peut être pareil en zsh)

LIST=(`find /usr/local/share/texmf -type f -name "*.dvi" -print`)

Mais s'il y a des fichiers avec des espaces dans les noms (des
caractères de $IFS plus exactement), ça se gâte.



(Quitte à mettre des parentheses, autant passer à lisp tout de suite...)

--
__Pascal Bourguignon__ http://www.informatimago.com/

There is no worse tyranny than to force a man to pay for what he does not
want merely because you think it would be good for him. -- Robert Heinlein

Avatar
Stephane Chazelas
2004-06-21, 01:02(+02), :
Comment faire pour que chaque indice du tableau LIST correpondent
à un chemin et non pas à un caractère.

j'ai:

LIST=`find /usr/local/share/texmf -type f -name "*.dvi" -print` si
j'évalue: echo ${LIST[0]} j'ai / ; echo ${LIST[1]} u etc. J'ai bien
essayé de modifier la valeur de IFS en IFS='^.*$' mais cela ne change
rien. Une idée ? PS: Je travail avec le zsh.
[...]


En zsh:

LIST=( /usr/local/share/texmf/**/*.dvi(.N) )

Si tu tiens a utiliser find, mais alors ton script ne marchera
pas avec tous les noms de fichiers, tu peux faire :

IFS=$'n'
LIST=( $(
find /usr/local/share/texmf -type f -name "*.dvi" -print
) )

ou

LIST=(${(f)"$(
find /usr/local/share/texmf -type f -name "*.dvi" -print
)"})

Si tu as le find de GNU, tu peux faire:

IFS=$''
LIST=( $(
find /usr/local/share/texmf -type f -name "*.dvi" -print0
) )

ou

LIST=(${(ps::)"$(
find /usr/local/share/texmf -type f -name "*.dvi" -print0
)"})

--
Stephane

Avatar
Frédéric
In article, Stephane Chazelas wrote:
2004-06-21, 01:02(+02), :
Comment faire pour que chaque indice du tableau LIST correpondent
à un chemin et non pas à un caractère.

j'ai:

LIST=`find /usr/local/share/texmf -type f -name "*.dvi" -print` si
j'évalue: echo ${LIST[0]} j'ai / ; echo ${LIST[1]} u etc. J'ai bien
essayé de modifier la valeur de IFS en IFS='^.*$' mais cela ne change
rien. Une idée ? PS: Je travail avec le zsh.
[...]


En zsh:

LIST=( /usr/local/share/texmf/**/*.dvi(.N) )

Si tu tiens a utiliser find, mais alors ton script ne marchera
pas avec tous les noms de fichiers, tu peux faire :

Tu me conseille quoi alors à la place de find ?



[...]

--
Frédéric



Avatar
Stephane Chazelas
2004-06-21, 09:49(+00), Frédéric:
[...]
LIST=( /usr/local/share/texmf/**/*.dvi(.N) )

Si tu tiens a utiliser find, mais alors ton script ne marchera
pas avec tous les noms de fichiers, tu peux faire :

Tu me conseille quoi alors à la place de find ?




LIST=( /usr/local/share/texmf/**/*.dvi(.N) )

**/* fait une descente recursive. (.) est l'equivalent du "-type
f", (N) est pour autoriser une liste vide, tu peux vouloir
rajouter (D) pour inclure les fichiers cachés (dotfiles):

LIST=( /usr/local/share/texmf/**/*.dvi(.DN) )

Voir:

info -f zsh -n 'Filename Generation'

--
Stephane



Avatar
Rakotomandimby Mihamina
Y a rien a dire, tu m'epatera tou-jours ...
Je comprends pas comment t'as fait pour savoir ce que tu sais.
Ne me dis pas que t'as lu ET compris tout le man (ou info) de zsh ?
Le truc c'est que je me dis :"Si li y arrive, je le peux aussi" ... ben
non... je le peux pas .... ;-)
Moi je le dis ici, si je te vois dans la rue, je me baisse jusqu'a terre
a ton passage ...
--
Rakotomandimby Mihamina Andrianifaharana
Tel : +33 2 38 76 43 65
http://stko.dyndns.info/site_principal/Members/mihamina
Avatar
Stephane Chazelas
2004-06-21, 20:36(+02), Rakotomandimby Mihamina:
[...]
Ne me dis pas que t'as lu ET compris tout le man (ou info) de zsh ?
[...]


Il n'y a besoin de quasi rien savoir pour utiliser zsj, vu que
tout ce qui s'applique a sh ou bash s'applique aussi a zsh. zsh
est plus facile a apprendre dans la mesure ou il a corrigé la
plupart des erreurs de design du Bourne shell qui font que ce
dernier apparaissent deconcertant a un debutant.

Pour ce qui est des power-fonctionnalités de zsh, on peut les
decouvrir au fur et a mesure.

La "filename generation" en est une a decouvrir en premier vu
son intérêt. Je m'en sers en permanence. C'est peut-etre la
premiere des fonctionnalités de zsh qui ferait que je ne
pourrais pas l'echanger contre deux barils de bash ou ksh.

--
Stephane