1) le pushd et popd ne servent à rien car si tu éxécutes le script, un nouveau shell sera ouvert comme sous-processus et cela n'influencera en rien ton répertoire courant dans le shell appellant - ce n'est d'utilié que si tu le fais via une fonction shell ou si tu appelles le script via source (ou .), ce qui n'est pas le cas ;-)#!/bin/bash pushd . cd /var/db/pkg for f in `find . -name *.ebuild` do echo ${f%%.ebuild} done popd
(ou alors il y a une suite dans le script, j'ai pas suivi le thread ;-))
2) change le for en while et ça marchera
En bref, ça donne:
#!/bin/bash
cd /var/db/pkg
find . -name '*.ebuild' \
| while read f; do
echo ${f%%.ebuild}
done
mais cf. en bas du mail pour la version la plus simple avec sed ;-)
c'est le ${f%%.ebuild} qui enlève le .ebuild (merci Pascal pour un mail à ce sujet un jour ;-) )C'est bien pratique hein ;-))
Ca évite surtout de devoir passer par un subshell et sed ou cut (ce qui est bcp plus lent).
Il y a aussi
%{x##*/}
qui est très pratique: ça équivaut à un "basename"
p.ex.:
x=/foo/bar/spam/eggs
=> ${x##*.} donnera: eggs
Il y a aussi moyen de faire des substitutions simples:
%{x/spam/eggs}
va remplacer "spam" par "eggs" partout dans la variable x
(en fait, retourne une valeur dans laquelle le remplacement est fait, ça ne modifie pas x évidemment ;-))
...
je crois qu'il y a moyen de tout faire de le find avec la commande -exec, mais je n'ai pas trouvé comment s'en sortir avec la substitution:Ca, ça ne marche pas: le exec ne saurait pas lancer de commande bash, il fait un fork+exec !
... -exec echo ${{}%%.ebuild} (le {} remplace le fichier trouvé)
Non, oublie le -exec, ça aura pour conséquence que find fera (pour chaque fichier trouvé) un fork et exec d'un nouveau sous-processus pour éxécuter la commande.
Si possible, il faut essayer d'utiliser "while" ou "for" et les builtins bash pour faire des transformations, c'est de loin le plus performant ;-)
(en bref, éviter la création de sous-processus)
du -cha /var/db/pkg | grep ebuild | cut -c 18-
...
Voici la solution la plus simple:j'aimerais supprimer le '.ebulid' seulement cut ne me propose pas de coupé les x derniers caractères de la ligne. je connais pas trop textutils, qqn peut il m'aider?
( cd /var/db/pkg; find * -name '*.ebuild' | sed 's/\.ebuild$//' )
(y compris les ( ): ça lance un subshell et évite de changer ton répertoire courant dans le shell appelant)
--
-o) Pascal Bleser ATOS Origin/Aachen(DE) |
/\\ <[EMAIL PROTECTED]> |
_\_v <[EMAIL PROTECTED]> |
---------------------------------------------|
Jesus saves,Buddha makes incremental backups :
---------------------------------------------'
_______________________________________________________
Linux Mailing List - http://www.unixtech.be
Subscribe/Unsubscribe: http://www.unixtech.be/mailman/listinfo/linux
Archives: http://www.mail-archive.com/linux@;lists.unixtech.be
IRC: efnet.skynet.be:6667 - #unixtech