#1 Le 24/08/2011, à 10:05
- matth314
Problème d'utilisation commande distante scp dans un script shell
Salut à tous,
je suis amené assez souvent à échanger des fichiers entre mon ordi maison et ma machine au boulot, à l'adresse matth314@boulot.fr. Pour faire cela j'ai mis deux fonctions dans le .bashrc de mon home :
function scpin
{
scp matth314@boulot.fr:$1 .
}
function scpout
{
scp $1 matth314@boulot.fr:.
}
Ca fonctionne bien, dans les deux sens, tant que je ne transfère qu'un fichier. Mais si je transfère par ex. plusieurs images, alors
scpin *.jpg
fonctionne sans problème alors que
scpout *.jpg
ne marche pas : il n'envoie que le premier fichier, et après il s'arrête.
N.B. j'ai tenté une formulation récursive avec scp -r à la place de scp, mais ca ne change rien, ni pour scpin ni pour scpout.
Quelqu'un aurait-il une idée du pourquoi du plantage, et une solution pour arranger scpout ?
Merci d'avance.
Dernière modification par matth314 (Le 24/08/2011, à 18:03)
Hors ligne
#2 Le 24/08/2011, à 10:36
- Watael
Re : Problème d'utilisation commande distante scp dans un script shell
salut,
dans le premier cas (scpin) il n'y a pas de développement de *.jpg, alors que dans le second cas (scpout), ce n'est pas *.jpg qui est passé à la fonction, et la fonction qui ferait le développement; le développement est effectué avant, et donc $1 correspond au premier mot du premier fichier.
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#3 Le 24/08/2011, à 17:45
- matth314
Re : Problème d'utilisation commande distante scp dans un script shell
Merci Watael.
Première question car je suis néophyte en scripts shell : tu parles du "développement" d'un ou des argument(s), qu'est-ce que c'est exactement ?
Deuxième question : j'imagine que tu as compris ce que je veux faire, sais-tu quel script écrire pour parvenir à le faire ?
Hors ligne
#4 Le 24/08/2011, à 20:39
- Watael
Re : Problème d'utilisation commande distante scp dans un script shell
1/
quand tu utilises des caractères génériques tel que *, ou ?, s'il existe une correspondance dans le répertoire indiqué (ou le répertoire courant, si rien n'est indiqué), le shell développe les correspondances.
ls
fichier_a fichier_b fichier_c fichier_DD
echo *
fichier_a fichier_b fichier_c fichier_DD
echo fichier_?
fichier_a fichier_b fichier_c
et donc
une_fonction () { echo $1 ; }
set -x; une_fonction fichier_*; set +x
+ une_fonction fichier_a fichier_b fichier_c fichier_DD
+ echo fichier_a
fichier_a
+ set +x
2/
la solution consiste à protéger le caractère générique
scpout \*.jpg
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#5 Le 24/08/2011, à 20:40
- aduxas
Re : Problème d'utilisation commande distante scp dans un script shell
Avant de passer les arguments à une commande, la shell développe les wild cards (jokers), comme l'étoile. Donc, ce que la command scp voit, c'est la liste des fichiers qui correspondent à *.jpg et non la chaine "*.jpg". Normalement, ce développement n'est pas effectué à l'intérieur d'une paire d'apostrophes. Donc tu fais
scpout '*.jpg'
et ca roule.
Hors ligne
#6 Le 24/08/2011, à 20:44
- aduxas
Re : Problème d'utilisation commande distante scp dans un script shell
OK, Watael m'a battu de quelques secondes! Le backslash indique que la shell doit interpreter l'étoile littéralement (comme une étoile) et non comme un wildcard. Donc il n'y a pas de développement non plus
Hors ligne
#7 Le 25/08/2011, à 23:02
- matth314
Re : Problème d'utilisation commande distante scp dans un script shell
@Watael et aduxas : parfait, un grand merci.
Je suis déjà un peu moins néophyte !
Hors ligne