[ssh sous linux] éxecuter ssh avec variable

Résolu
marco.marco Messages postés 29 Date d'inscription   Statut Membre Dernière intervention   -  
dubcek Messages postés 18789 Date d'inscription   Statut Contributeur Dernière intervention   -
Bonjour à tous !

Je voudrais éxecuter une commande, disons un simple "ls -rtl", soit en local sur mon serveur linux, soit sur un autre serveur distant via une commande ssh.
Et pour éviter de créer deux fois la commande dans mes shells, j'ai tout mis sous forme de variables :

si Serveur_local
distant1=""
distant2=""

si Serveur_distant1
distant1="ssh ${lib_ens2}-bkp \""
distant2="\""

d'où la commande :

${distant1}ls -rtl ${distant2}
ce qui donne soit:
ls -rtl
soit
ssh serveur_distant1 "ls -rtl"


en local car marche impec' mais si je charge les variable de sites distant j'ai ca :
bash: ls -rtl: command not found

par contre, si je tape cette meme commande sans variable ca marche:
ssh serveur_distant1 "ls -rtl"
drwxr-xr-x 2 root root 4096 aoû 19 2009 Desktop

pour etre sur je fais un echo de toute la commande avec variable :
echo "${distant1}ls -rtl${distant2}"
ssh serveur_distant1 "ls -rtl"


Je ne comprends pas trop pourquoi ca ne marche pas.
Quelqu'un pourrait m'aider svp ?

Merci !!!
A voir également:

5 réponses

jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 896
 
Salut,

distant2="\""
C'est quoi ça ??? Une double quote ?

$ man woman
Il n'y a pas de page de manuel pour woman.
0
marco.marco Messages postés 29 Date d'inscription   Statut Membre Dernière intervention   1
 
Hello jipicy,

Oui, pour terminer mon ssh. je suis obligé de la variabiliser cette double cote sinon, si je lance la commande sur mon serveur local, donc sans le ssh, il se retrouverait avec une " orpheline à la fin de cette commande.

J'ai continué un peu mes tests entre temps et en faisant un simple ls sans option:

${distant1} ls ${distant2}

ca passe !

C'est donc le tiret avec les options derrières qu'il n'aime pas.
J'ai essayé ${distant1} ls \-rtl ${distant2}, soit avec un anti-slash avant le tiret mais le résultat est le meme :

bash: ls -rtl: command not found

Le problème c'est que les commandes que je dois lancer en contiennent tout plein...
Je sèche...
0
jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 896
 
C'est un peu tarabiscoté ces histoires de quotes ;-((

Tu peux essayer ça s'il te plait :

distant1="ssh ${lib_ens2}-bkp" 
${distant1} 'ls -rtl'
0
marco.marco Messages postés 29 Date d'inscription   Statut Membre Dernière intervention   1
 
Ca passe !!!!
Effectivement je me compliquais un peu la vie...

En fait le ${distant1} 'ls -rtl' passe très bien mais les veritables commandes elles ne me ramenaient rien (sans générer une erreur non plus).
Mais en faisant un ${distant1} "commande" (donc une double cote au lieu d'une simple), là plus aucun problème !

Merci pour tout Jipicy !
0
marco.marco Messages postés 29 Date d'inscription   Statut Membre Dernière intervention   1
 
En fait non, j'ai été un peu trop optimiste...

Ca passe bien sur serveur distant mais du coup c'est en local que ca ne passe plus...

distant1=""
${distant1} 'ls -rtl'
-bash: ls -rtl: command not found

:`-(

Bon tant pis ce n'est pas bien grave, je vais juste tester avant sur quel serveur je lance ma commande et créer le double de la commande, avec un ssh avant ou non.

En tout cas encore merci, c'est sympa d'avoir répondu :-)
0
jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 896
 
Là pour le coup c'est les quotes simples qui fichent la pagaille ;-((

Enlèves-les tout simplement, et en local et en distant...
0
marco.marco Messages postés 29 Date d'inscription   Statut Membre Dernière intervention   1 > jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention  
 
Ca maaaaaaaaaaaaaaaaaaaaarche !!!!!!!!!!!!!!!!!!

:-)))))))))

Et moi qui pensais qu'un ssh devait obligatoirement être "entrecoté"...

Merci Jipicy !
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
dubcek Messages postés 18789 Date d'inscription   Statut Contributeur Dernière intervention   5 637
 
ou définir distant1="eval" : $distant1 'ls -l' ou $distant1 "ls -l" fonctionnent

$ cd /etc
$ distant1="eval"
$ distant1 'ls -l' | head -3
total 1528
drwxr-xr-x  8 root root     4096 2009-05-08 08:51 acpi
-rw-r--r--  1 root root     2986 2009-04-20 16:28 adduser.conf
$ 
$ distant1 "ls -l" | head -3
total 1528
drwxr-xr-x  8 root root     4096 2009-05-08 08:51 acpi
-rw-r--r--  1 root root     2986 2009-04-20 16:28 adduser.conf
$ 
0