Bonjour,
J'ai résolu mon probleme mais un peu par hasard, et donc, deux questions taraudent le mega noob () :
1) lcd
a) Execution à la mano : Ok
b) Execution en shell : Nok
c) Remplacement du "lcd" par un "cd" placé avant la macro ftp : Ok
Dans le cas b), le fichier à copier n'est pas trouvé lors de l'execution du shell, alors qu'il l'est lors de l'execution manuelle, dans les mêmes conditions, depuis le même répertoire.
Dans le cas c), en se plaçant dans le repertoire source avant l'execution de la macro (par un "cd"), le shell fonctionne également.
=> Est ce que la commande "lcd" est bloquée ou inhibée en mode "macro" FTP (Debian Lenny) ?
2) macdef <nom_macro>
Si j'essaye de remplacer le nom de la macro par une composition plus .. disons personnelle, le script bloque. En clair, ça bloque dès que je mets un autre nom de macro que "init". Or je n'ai trouvé nulle part que ces noms étaient prédéfinis...
=> Aurais-je (encore) loupé qq chose ?
Merci d'avance
Je mets mon shell diabolique le cas échéant - au moins j'espère que ça vous fera marrer - :
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 #!/bin/sh # ################################################################################ # usage: my_send_ftp <dest_ip> <sh local_file_path> <remote_file_path> # ################################################################################ # ######################################################### # TODO # remote chmod 0755 if shell script to be sent : quote site chmod xxx [file name] # ######################################################### # #################################### # INIT # #################################### echo -n "0) preliminary checks : " # credentials HOST=$1 PORT="21" FTP_USER="foo" FTP_PWD="bar" EXCHANGE="ascii" #"binary" # or ascii for text files # Local directories & files [ -z $HOME ] || [ ! -d $HOME ] && HOME=/home NETRC=$HOME/.netrc LOGME=$HOME/ftp.log LOCAL_FILE=$2 [ ! -f $LOCAL_FILE ] && echo "local file not exists" && exit 1 LOCAL_DIR=$(dirname $LOCAL_FILE) LOCAL_FILE=$(basename $LOCAL_FILE) # remote directories & files REMOTE_FILE=$3 REMOTE_DIR=$(dirname $REMOTE_FILE) REMOTE_FILE=$(basename $REMOTE_FILE) # a few parameter controls PARAMETERS=$# [ $PARAMETERS -ne 3 ] && echo "missing input parameters" && exit 1 [ -z $HOST ] && echo "missing destination HOST parameter!" && exit 1 [ ! -d $LOCAL_DIR ] && echo "local dir not exists" && exit 1 [ -z $LOCAL_FILE ] && echo "missing file to be sent" && exit 1 [ -z $REMOTE_FILE ] && echo "missing /destination/path/file" && exit 1 # checkpoint : ping HOST ping -c1 $HOST >/dev/null [ $? -ne 0 ] && echo "$HOST not reachable " && exit 1 # else if all is ok echo "done" echo -n "1) backup previous netrc: " [ -f $NETRC ] && cp $NETRC $NETRC".bak" [ -f $NETRC ] && rm $NETRC echo "done" # CLOSING FTP RUNNING PROCESSES echo -n "2) clear ftp running processes : " pgrep "^ftp$" | xargs kill -9 2>/dev/null echo "done" # Now Send the file echo -n "3) send local file to the remote ip : " ACTION="lcd $LOCAL_DIR\nmkdir $REMOTE_DIR\ncd $REMOTE_DIR\nput $LOCAL_FILE" echo "doing now : \n$ACTION\n" cd $LOCAL_DIR echo "machine $HOST login $FTP_USER password $FTP_PWD" > $NETRC echo "macdef init" >> $NETRC echo "$EXCHANGE" >> $NETRC echo -e "$ACTION" >> $NETRC echo "quit" >> $NETRC echo "" >> $NETRC chmod 0600 $NETRC ftp $HOST >> $LOGME echo "done" # Final closing (PROCESSES FTP incl .netrc) echo -n "4) clear all FTP processes: " pgrep "^ftp$" | xargs kill -9 2>/dev/null [ -f $NETRC ] && cp $NETRC $NETRC".bak" [ -f $NETRC ] && rm $NETRC echo "done" # "This is the end, yes the end" (Jim M.) echo "END" exit 0
Partager