Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#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