Bonjour

Voici un code que je génère automatiquement depuis quelques années pour mettre mon site automatiquement à jour :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
#!/bin/sh
cp -fa $1 ~/.netrc
unftp=`grep machine ~/.netrc`
echo ftp ${unftp#machine}
ftp << **
open ${unftp#machine}
passive
cd Linux
put Linux.odt
bye
Ces derniers temps, ce code génère une erreur !
J'ai l'impression qu'il manque une ligne avec ** à fin. Ceci ne me pose de problème d'un point de vu programmation, mais j'aimerai savoir pourquoi ce qui ne générait pas d'erreur au début en génère maintenant.

Pour info, voici mes fichiers qui servent à générer automatiquement ce fichier :
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
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
#!/bin/sh
 
# Racine du site sur votre PC, à adapter
racine="/var/www/html/Troumad"
 
# License GPL bien sur ;)
# ce script attend en paramètre un nom de fichier qui peut être 
# donné sous forme d'un chemin relatif ou absolu.
 
# Maniement de Chaîne par
# Christophe Gaubert http://perso.wanadoo.fr/christophe.gaubert
 
# Une fonction qui affiche le message d'usage et sort.
# j'utilise ce qui s'appelle un Here-document :
# http://abs.traduc.org/abs-3.6-fr/here-docs.html
# comme ce que tu donne à ftp
usage()
{
 cat <<EOF
 Utilisation :
 "ftpsite --help"     pour avoir ses informations
 "ftpsite fichiers/répertoire [fichiers/répertoire] [fichiers/répertoire]..."
                               pour transférer les fichiers/répertoires sités
 "ftpsite" pour transférer tout le répertoire courant et ses sous répertoires
EOF
 
 exit 0
}
 
copieftp()
{
# On a repéré le cas où le chemin est /maison_1/bs/sites/Troumad pour donner ./
 if [ -f "$1" ] ; then
  fichier=$1
  l=`echo $[ ${#fichier} - 1]`
  if [ "${fichier:$l}" != "~" ] ; then
   echo "put $1" >> ~/script/lock.sh
  else
   rm "$1"
  fi
 elif [ -r "$1" ] ; then
  echo "lcd $1" >> ~/script/lock.sh
  if [ "$PWD/$1" != "$racine" ] ; then
  #echo "$PWD$1 != $racine"
  echo "mkdir $1" >> ~/script/lock.sh
  #echo "lcd $1" >> ~/script/lock.sh
  echo "cd $1" >> ~/script/lock.sh
  fi
  cd $1
  for fich in * ; do
   # éviter le problème du répertoire sans droit de lecture
   # autre méthode : for file in `ls 2>/dev/null`; do
   [ "$fich" != "*" ] && copieftp "$fich"
  done
  echo "lcd .." >> ~/script/lock.sh
  echo "cd .." >> ~/script/lock.sh
  cd ..
 fi
}
 
# on commence par vérifier qu'il a bien reçu un argument et que
# celui-ci correspond à un fichier, sinon on sort. 
if [ $# == 0 ] ; then
 a=$PWD
 cd ..
 ~/script/ftpsite.sh "$a/"
 exit $?
fi
# recherche du paramètre passé
case "$1" in
    --help)
        usage
        ;;
       *)
        a=0
	# parcours des paramètres
        while [ $# -gt 0 ]; do
         # on sépare le nom du fichier de la partie correspondant au
         # répertoire :
         filename=$(echo `basename $1`)
         dirname=$(echo `dirname $1`)
         # maintenant :
         # - filename est le nom ("strict") du fichier
         # - dirname est le répertoire dans lequel se trouve ce fichier, ça
         # peut être un chemin relatif (comme "../..) ou un chemin absolu
         # (comme /usr/local/src)
         # NB : on devrait pouvoir faire cette séparation par simple manipulation
         # de la chaine $1, sans faire appel à basename et dirname.
         # Optimisation laissée en exercice ;)
         # Puis on transforme le chemin éventuellement relatif en chemin absolu
         # en faisant appel à pwd :
         old_pwd=$(pwd) # au cas où on voudrait y revenir
         cd "$dirname"
         dirname=$(pwd)
         # maintenant : dirname est le chemin absolu du répertoire qui contient
         # le fameux fichier
         # et il ne reste plus qu'à l'analyser :
         # - soit il commence par /maison_1/bs/sites/Troumad
         #                => on supprime /maison_1/bs/sites/Troumad pour ne garder que la suite
         #                   du chemin
         # - soit il ne commence pas par /maison_1/bs/sites/Troumad
         #                => on sort
         # traiter le premier argument
         case "$dirname/$filename" in
         $racine*)
          # répertoire à modifier selon votre configuration ligne du dessus et du dessous
          chemin=${dirname#$racine}
          if [ -z "$chemin" ] ; then
           chemin="./"
          else
           chemin=${chemin#/}
          fi
         ;;
         *)
          echo "error : répertoire non valide"; exit 1
         ;;
         esac
         if [ -e "~/script/lock.sh" ] ; then
          echo "erreur dans la création de ~/script/lock.sh"
          exit 1
         fi
	 # unftp contient le début du fichier de commande pour le ftp,
         cp ~/script/unftp.sh ~/script/lock.sh
	 # nous allons construire la suite dans lock.sh
         chmod +x ~/script/lock.sh
         echo "cd $chemin" >> ~/script/lock.sh
         copieftp "$filename"
         [ $? = 1 ] && exit 1
         cd "$dirname"
         echo "bye" >> ~/script/lock.sh
         echo "**" >> ~/script/lock.sh # nouvelle ligne à cause de l'erreur !
         for fich in ~/script/site/* ; do
          # appel de lock.sh une fois par ftp trouvé dans le répertoire site
          ~/script/lock.sh $fich
         done
 
         #less ~/script/lock.sh
         rm -f ~/script/lock.sh
 
         cd "$old_pwd"
         shift # décale les arguments d'un cran :
         #   $1 <- $2, $2 <- $3 ...
        done
        exit $a
        ;;
esac
et
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
#!/bin/sh
#${dirname#$racine}
cp -fa $1 ~/.netrc
unftp=`grep machine $1`
echo ftp ${unftp#machine}
ftp <<**
open ${unftp#machine}
passive