Bonjour
Voici un code que je génère automatiquement depuis quelques années pour mettre mon site automatiquement à jour :Ces derniers temps, ce code génère une erreur !
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
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 :et
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
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
Partager