[ssh sous linux] éxecuter ssh avec variable

Résolu/Fermé
marco.marco Messages postés 29 Date d'inscription mardi 1 juillet 2008 Statut Membre Dernière intervention 29 novembre 2013 - 11 mars 2010 à 12:04
dubcek Messages postés 18764 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 9 février 2025 - 11 mars 2010 à 16:02
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 jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 897
Modifié par jipicy le 11/03/2010 à 12:54
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 mardi 1 juillet 2008 Statut Membre Dernière intervention 29 novembre 2013 1
11 mars 2010 à 13:35
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 jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 897
Modifié par jipicy le 11/03/2010 à 13:45
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 mardi 1 juillet 2008 Statut Membre Dernière intervention 29 novembre 2013 1
11 mars 2010 à 14:02
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 mardi 1 juillet 2008 Statut Membre Dernière intervention 29 novembre 2013 1
11 mars 2010 à 14:20
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 jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 897
11 mars 2010 à 15:35
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 mardi 1 juillet 2008 Statut Membre Dernière intervention 29 novembre 2013 1 > jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020
11 mars 2010 à 15:58
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 18764 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 9 février 2025 5 624
11 mars 2010 à 16:02
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