Bonjour,

J'essaye de passer un script de Solaris à Linux, le script fonctionne très ben sous Solaris.
C'est une "simple" fonction qui parcours un répertoire et renvoi un nom de fichier.

En pratique :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#_________________________ FONCTION DE SCRUTATION DE REPERTOIRE ________________
#
# Param 1 : nom du repertoire a scruter
# Param 2 : nom du dernier fichier traite
# Param 3 : type de recherche f pour fichier ou d pour repertoire
#
# Retour de la fonction :
# La variable "Retour_Scrut" contient le nom du fichier suivant
#
 
Scrut_Rep() {
if [ ! -d "$1" ]; then
   Retour_Scrut=""; return
fi
 
# on remplace dans le path de scrutation '/' par '\/'
Sub_scrut=`echo $1 | sed -e "s/\/$//" -e "s/$/\//" | sed -e "s/\//\\\\\\\\\//g"`
 
Retour_Scrut=`find $1 -type $3 | sed -e "s/$Sub_scrut//" | awk '{
 
   if (PREC != "" ) {
      while ( $0!=PREC && getline == 1 ) ;
      getline
   }
 
   while ( index($0,"/")!=0) getline
   print $0
   exit  }  ' PREC="$2"`
}
Typiquement on appelle cette fonction dans une boucle du genre :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
Scrut_Rep $Rep_traite "" f
while [ "$Retour_Scrut" != "" ]; do
     echo "$Retour_Scrut"
     Scrut_Rep $Rep_traite "$Retour_Scrut" f
done
Sur Solaris, ça va m'afficher la liste des fichiers du répertoire et on sort du while.
Par contre sous Linux, il va tourner indéfiniment dans la boucle et afficher indéfiniment le nom du dernier fichier présent.

J'ai du mal à piger la logique de la fonction à vrai dire, je comprend pas le index($0,"/")!=0 par exemple, je sais que ça retourne la position du premier / mais pourquoi utiliser ça.

Enfin j'ai planché la dessus quelques heures déjà et impossible de trouve pourquoi le comportement est différent sous Linux. Après il y a d'autres moyens de faire la même chose mais j'ai envie de comprendre ^^

Peut-être que quelqu'un aura une idée géniale...