Précédent   Forum des professionnels en informatique > Systèmes > Linux > Applications > Shell
Shell Vos questions sur l'utilisation des commandes shell
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
Vieux 13/02/2010, 09h00   #1
Membre confirmé
 
Avatar de voran
 
Inscription : janvier 2005
Messages : 230
Détails du profil
Informations personnelles :
Localisation : France, Maine et Loire (Pays de la Loire)

Informations forums :
Inscription : janvier 2005
Messages : 230
Points : 237
Points : 237
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 :
scp fic.txt User@Remote:$VAR/data
voran est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/02/2010, 09h32   #2
Membre chevronné
 
Inscription : septembre 2007
Messages : 685
Détails du profil
Informations personnelles :
Âge : 48
Localisation : Suisse

Informations forums :
Inscription : septembre 2007
Messages : 685
Points : 723
Points : 723
Bonjour,

La variable est-elle connue dans l'environnement local ou sur la machine distante?
__________________
Un problème bien posé est déjà résolu (H. Bergson).
jmelyn est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/02/2010, 13h04   #3
Membre chevronné
 
Inscription : septembre 2007
Messages : 685
Détails du profil
Informations personnelles :
Âge : 48
Localisation : Suisse

Informations forums :
Inscription : septembre 2007
Messages : 685
Points : 723
Points : 723
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 :
scp user@host:'/path/$var' .
__________________
Un problème bien posé est déjà résolu (H. Bergson).
jmelyn est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/02/2010, 18h13   #4
Membre confirmé
 
Avatar de voran
 
Inscription : janvier 2005
Messages : 230
Détails du profil
Informations personnelles :
Localisation : France, Maine et Loire (Pays de la Loire)

Informations forums :
Inscription : janvier 2005
Messages : 230
Points : 237
Points : 237
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 :
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 ).
voran est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/02/2010, 20h58   #5
Membre chevronné
 
Inscription : septembre 2007
Messages : 685
Détails du profil
Informations personnelles :
Âge : 48
Localisation : Suisse

Informations forums :
Inscription : septembre 2007
Messages : 685
Points : 723
Points : 723
Bonsoir,

Tu peux ajouter, dans le fichier .bash_profile des machines cibles, la ligne:
Code :
[[ -f ~/.bashrc ]] && . .bashrc
__________________
Un problème bien posé est déjà résolu (H. Bergson).
jmelyn est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/02/2010, 18h27   #6
Membre confirmé
 
Avatar de voran
 
Inscription : janvier 2005
Messages : 230
Détails du profil
Informations personnelles :
Localisation : France, Maine et Loire (Pays de la Loire)

Informations forums :
Inscription : janvier 2005
Messages : 230
Points : 237
Points : 237
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 :
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
voran est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/02/2010, 22h50   #7
Membre chevronné
 
Inscription : septembre 2007
Messages : 685
Détails du profil
Informations personnelles :
Âge : 48
Localisation : Suisse

Informations forums :
Inscription : septembre 2007
Messages : 685
Points : 723
Points : 723
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.
__________________
Un problème bien posé est déjà résolu (H. Bergson).
jmelyn est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/02/2010, 23h16   #8
Membre confirmé
 
Avatar de voran
 
Inscription : janvier 2005
Messages : 230
Détails du profil
Informations personnelles :
Localisation : France, Maine et Loire (Pays de la Loire)

Informations forums :
Inscription : janvier 2005
Messages : 230
Points : 237
Points : 237
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 ?
voran est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/02/2010, 15h11   #9
Membre chevronné
 
Inscription : septembre 2007
Messages : 685
Détails du profil
Informations personnelles :
Âge : 48
Localisation : Suisse

Informations forums :
Inscription : septembre 2007
Messages : 685
Points : 723
Points : 723
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 :
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 :
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!
__________________
Un problème bien posé est déjà résolu (H. Bergson).
jmelyn est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +1. Il est actuellement 12h20.


 
 
 
 
Partenaires

Hébergement Web