Re: Shell script

Top Page

Reply to this message
Author: Edgar Bonet
Date:  
To: ML Guilde
Subject: Re: Shell script
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