Le jeudi 23 octobre, Rene LEVANTINH a écrit :
> Je voulais faire un paquet RPM en lancant la commande rpmbuild.
> Cette commande exécute le script suivant :
>
> RPM_BUILD_ROOT=$1
>
> [ ! -d "$RPM_BUILD_ROOT" ] && exit 1
>
> [ "$TMPDIR" ] || TMPDIR=/tmp
> FILES_DISK=`mktemp $TMPDIR/rpmXXXXXX`
> FILES_RPM=`mktemp $TMPDIR/rpmXXXXXX`
>
> find $RPM_BUILD_ROOT -type f | LC_ALL=C sort > $FILES_DISK
> LC_ALL=C sort > $FILES_RPM
>
> for f in `diff "$FILES_DISK" "$FILES_RPM" | grep "^< " | cut -c3-`; do
> echo $f | sed -e "s#^$RPM_BUILD_ROOT# #g"
> done
>
> rm -f $FILES_DISK
> rm -f $FILES_RPM
>
> Comme ca ne marchait pas, je voudrais savoir ce que fait LC_ALL=C
Ça met la variable d'environnement LC_ALL à la valeur "C" mais seulement
pour la commande suivante (sort). C'est pour que le tri se fasse en
ordre ASCIIbétique et non alphabétique. Exemple :
$ echo -e 'a\nB' | LC_ALL=C sort
B
a
$ echo -e 'a\nB' | LC_ALL=fr sort
a
B
> et que fait la boucle for.
- $FILES_DISK et $FILES_RPM sont deux fichiers contenant des listes
triées de fichiers ;
- diff "$FILES_DISK" "$FILES_RPM" donne la différence entre les deux
listes ;
- grep "^< " sélectionne les lignes commençant par "< ", c'est à dire
celles qui dans le format de diff désignent les fichiers listés dans
$FILES_DISK et non dans $FILES_RPM ;
- cut enlève les deux premiers caractères de chacune des lignes, c'est
à dire "> " ; on a donc à ce stade la liste des fichiers dans
$FILES_DISK absents de $FILES_RPM, un fichier par ligne ;
- le shell remplace `...` par la liste des mots produits par ce pipe ;
- for fait une boucle sur cette liste, en assignant à la variable f le
nom du fichier courant ;
- echo $f affiche ce nom ;
- sed remplace $RPM_BUILD_ROOT en préfixe du fichier par trois
espaces.
Globalement ce script établit la liste ($FILES_DISK) des fichiers
contenus dans le répertoire $RPM_BUILD_ROOT et compare cette liste avec
une autre liste ($FILES_RPM) reçue sur l'entrée standard. Il produit la
liste des fichier présents dans $RPM_BUILD_ROOT et absents de la liste
reçue sur l'entrée standard.
Edgar.
--
Edgar Bonet Maison : 04 76 21 29 16 Bureau : 04 76 88 10 96
3 rue Jean Prévost Mobile : 06 77 19 79 39 Fax : 04 76 88 11 91
38000 Grenoble guilde@??? www.edgar-bonet.org