Envoi de fichier avec scp
Netbeans est un bon logiciel mais il souffre d'un défaut qui commence à être rédhibitoire : sa lourdeur ! Lorsque j'ouvre un projet conséquent (comme un projet avec Joomla / Virtuemart), je peux facilement me faire un café en attendant de pouvoir commencer. Si j'ai le malheur de laisser le projet ouvert sans rien faire dessus, il reste figé un bon moment avant de me rendre la main... Bref, il est temps pour moi de passer à plus léger et plus universel : Vi !
Au delà de l'autocomplétion et autres gadgets bien utiles, il est un aspect de Netbeans que j'adore (j'ai même quitté Eclipse et Aptana pour ça) : l'envoi de fichier par FTP via un raccourci clavier... Je n'ai pas encore réussi à retrouver ce comportement avec Vim mais ma petite découverte de ce soir va peut être changer la donne : j'ai trouvé comment envoyer un fichier par scp sans avoir à attendre pour saisir mon mot de passe (via http://www.lesitedemika.org/wika/scp-ssh-en-script-avec-expect)
La première chose est d'installer expect. La seconde est de créer le script suivant (scp_expect.sh par exemple) et de le rendre exécutable :
<code>
#!/usr/bin/expect -f
# effectue le transfert par SCP (sur SSH)
set timeout 3600
set localfile [lindex $argv 0]
set distfile [lindex $argv 1]
set servername [lindex $argv 2]
set password [lindex $argv 3]
spawn scp $localfile $servername:$distfile
expect "password:"
send -- "$password\r"
expect "100%"
exit 0
</code>
Il s'utilise de la façon suivante : scp-expect.sh /home/user-local/fichier.txt /home/user-dist/fichier.txt user-dist@serveur-dist.com pass-de-user-dist
Petite explication :
- le
set timeout 3600
permet au script d'attendre jusqu'à 1h la réponse du serveur distant, les autresset
récupèrent les paramètres (on peut même imaginer de simplifier le script en définissant à l'avance les paramètres servername et password si on travaille sur le même serveur tout le temps)
spawn scp ...
lance la commande scp
- et expect permet "d'attendre" la réponse du serveur et de récupérer la ligne contenant la chaîne "password:"
- à ce moment là, le script envoie la valeur du paramètre password
- on attend que le serveur renvoie "100%" ce qui correspond à l'envoi complet du fichier et le script se termine
Plus qu'à mapper ça et à moi les joies de l'upload quasi automatique (de toute façon, avec Netbeans, je ne faisais que de l'envoi manuel :) )