[ssh sous linux] éxecuter ssh avec variable

[Résolu/Fermé]
Signaler
Messages postés
29
Date d'inscription
mardi 1 juillet 2008
Statut
Membre
Dernière intervention
29 novembre 2013
-
Messages postés
18256
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
16 septembre 2021
-
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 !!!

5 réponses

Messages postés
40805
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 881
Salut,

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

$ man woman
Il n'y a pas de page de manuel pour woman.
Messages postés
29
Date d'inscription
mardi 1 juillet 2008
Statut
Membre
Dernière intervention
29 novembre 2013

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...
Messages postés
40805
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 881
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'
Messages postés
29
Date d'inscription
mardi 1 juillet 2008
Statut
Membre
Dernière intervention
29 novembre 2013

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 !
Messages postés
29
Date d'inscription
mardi 1 juillet 2008
Statut
Membre
Dernière intervention
29 novembre 2013

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 :-)
Messages postés
40805
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 881
Là pour le coup c'est les quotes simples qui fichent la pagaille ;-((

Enlèves-les tout simplement, et en local et en distant...
Messages postés
29
Date d'inscription
mardi 1 juillet 2008
Statut
Membre
Dernière intervention
29 novembre 2013
>
Messages postés
40805
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020

Ca maaaaaaaaaaaaaaaaaaaaarche !!!!!!!!!!!!!!!!!!

:-)))))))))

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

Merci Jipicy !
Messages postés
18256
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
16 septembre 2021
5 363
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
$