IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Shell et commandes GNU Discussion :

scp et variable distante


Sujet :

Shell et commandes GNU

  1. #1
    Membre confirmé Avatar de voran
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    242
    Détails du profil
    Informations personnelles :
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 242
    Par défaut scp et variable distante
    Comment copier un fichier via scp dans un répertoire dans une variable initialisé sur la machine distante.
    Le répertoire distant est variable en fonction de la machine distante, d'où l'utilisation d'une variable

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    scp fic.txt User@Remote:$VAR/data

  2. #2
    Membre émérite Avatar de jmelyn
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Septembre 2007
    Messages
    703
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Septembre 2007
    Messages : 703
    Par défaut
    Bonjour,

    La variable est-elle connue dans l'environnement local ou sur la machine distante?

  3. #3
    Membre émérite Avatar de jmelyn
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Septembre 2007
    Messages
    703
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Septembre 2007
    Messages : 703
    Par défaut
    Bon, la réponse à ma précédente question est incluse dans le titre du fil: la variable est dans l'environnement distant.

    J'ai testé ceci, et c'est bon:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    scp user@host:'/path/$var' .

  4. #4
    Membre confirmé Avatar de voran
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    242
    Détails du profil
    Informations personnelles :
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 242
    Par défaut
    Citation Envoyé par jmelyn Voir le message
    Bon, la réponse à ma précédente question est incluse dans le titre du fil: la variable est dans l'environnement distant.

    J'ai testé ceci, et c'est bon:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    scp user@host:'/path/$var' .
    En effet, c'est plutôt simple, mais ne fonctionne pas sur mes environnements.

    La raison semble être que les variables sont initialisées par le .bash_profile et non par le .bashrc (qui est lu quand le shell est invoqué comme shell interactif sans fonction de connexion ).

  5. #5
    Membre émérite Avatar de jmelyn
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Septembre 2007
    Messages
    703
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Septembre 2007
    Messages : 703
    Par défaut
    Bonsoir,

    Tu peux ajouter, dans le fichier .bash_profile des machines cibles, la ligne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [[ -f ~/.bashrc ]] && . .bashrc

  6. #6
    Membre confirmé Avatar de voran
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    242
    Détails du profil
    Informations personnelles :
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 242
    Par défaut
    Merci pout ton aide
    Je peux proposer cela, mais je crains de ne pas toujours avoir l'initiative, car il s'agit des machine de mes clients.

    Donc dans le cas où cela n'est pas accepté, j'ai préparé ceci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    # Je récupère dans une variable locale le contenu de la variable distance après exécution du profile distant
    REMOTE_VAR=$(ssh REMOTE -l User -o StrictHostKeyChecking=no -o BatchMode=yes \
    "[ $(uname) != "Linux" ] && . ~/.profile || . ~/.bash_profile;echo \$VAR")
    #copie de fichier
    scp fichiers User@REMOTE:$REMOTE_VAR/path

  7. #7
    Membre émérite Avatar de jmelyn
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Septembre 2007
    Messages
    703
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Septembre 2007
    Messages : 703
    Par défaut
    Bonsoir,

    Normalement le fichier ~/.bash_profile est exécuté au login. Mais si celui-ci n'appelle pas ~/.bashrc, ce dernier ne sera pas exécuté, et c'est lui qui est généralement utilisé pour déclarer les variables d'environnement. Donc pour Linux, je serais tenté d'exécuter le ~/.bashrc, pas le ~/.bash_profile.

  8. #8
    Membre confirmé Avatar de voran
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    242
    Détails du profil
    Informations personnelles :
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 242
    Par défaut
    Citation Envoyé par jmelyn Voir le message
    Bonsoir,

    Normalement le fichier ~/.bash_profile est exécuté au login. Mais si celui-ci n'appelle pas ~/.bashrc, ce dernier ne sera pas exécuté, et c'est lui qui est généralement utilisé pour déclarer les variables d'environnement. Donc pour Linux, je serais tenté d'exécuter le ~/.bashrc, pas le ~/.bash_profile.
    Pourtant .bash_profile sert aussi à initialiser des variables, pourquoi plus .bashrc ? Il s'agit d'une convention ?

    Avec le Korn shell, c'est le .kshrc alors ?

  9. #9
    Membre émérite Avatar de jmelyn
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Septembre 2007
    Messages
    703
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Septembre 2007
    Messages : 703
    Par défaut
    Bonjour,

    J'ai ajouté la commande echo en début et en fin de différents fichiers d'initialisation. Ma distribution est la Fedora 12.

    Lors d'une commande "ssh localhost" ou "sudo -i" (login shell: on se connecte ou on change d'utilisateur):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    /etc/profile: start of execution
    /etc/profile: end of execution
    ~/.bash_profile: start of execution
      ~/.bashrc: start of execution
        /etc/bashrc: start of execution
        /etc/bashrc: end of execution
      ~/.bashrc: end of execution
    ~/.bash_profile end of execution
    Lors d'une commande "bash" ou ouverture d'un nouveau terminal dans la fenêtre konsole de KDE (interative shell: on ne change pas d'utilisateur):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    ~/.bashrc: start of execution
      /etc/bashrc: start of execution
      /etc/bashrc: end of execution
    ~/.bashrc: end of execution
    Lors d'un pipe "echo toto | cut -c 1" ou exécution d'un script (non-interactive shell)
    Qu'en conclure?
    Si l'on veut déclarer une variable qui soit visible aussi bien lorsqu'on fait un login que lorsqu'on ouvre un nouveau shell dans une session, il vaut mieux (il faut) placer sa déclaration dans le fichier ~/.bashrc!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. ssh et variable distante
    Par voran dans le forum Shell et commandes GNU
    Réponses: 1
    Dernier message: 12/02/2010, 11h23
  2. [SSH2] Utiliser scp pour gérer des fichiers distants
    Par cybercandyman dans le forum Bibliothèques et frameworks
    Réponses: 4
    Dernier message: 12/11/2007, 17h03
  3. Scp sur 2 serveurs distants
    Par Krispy dans le forum Réseau
    Réponses: 3
    Dernier message: 18/03/2006, 15h42
  4. Récupérer la valeur d'une variable distante
    Par seblo_scoqi dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 14/09/2005, 16h10

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo