4 votes

Exécuter un script local sur un serveur distant en utilisant ssh sans avoir à se soucier des guillemets.

J'ai donc exécuté des scripts locaux scripts sans problème sur un serveur distant :

ssh user@server "`cat local-script.sh`"

Cependant, aujourd'hui, j'ai un script qui contient à la fois des guillemets simples et des guillemets doubles. Ce qui fait échouer le script parce que la sortie de cat local-script.sh est entre guillemets. Sans modifier le script lui-même, existe-t-il un meilleur moyen de gérer cela ?

J'ai pensé que cela pourrait fonctionner :

ssh user@server $(<local-script.sh)

Mais cela ne semble rien faire...

8voto

johnshen64 Points 5687
cat local-script.sh | ssh user@server bash

ou tout autre Shell que vous souhaitez utiliser à la place de bash

4voto

jason saldo Points 5036

Avec le test suivant script :

#!/bin/bash
uname -n
a=(b c 'd e' f)
echo "${#a[@]}"
b=(1 "2 3" 4)
echo "${#b[@]}"

La sortie devrait être le nom de l'hôte distant suivi de 4 et de 3 lorsque la commande est exécutée :

ssh user@server "$(<scriptname)"

Cela montre que les guillemets à l'intérieur du script sont traités correctement. Si les guillemets n'étaient pas gérés correctement, les nombres produits seraient 5 et 4 en raison de la séparation des mots. Notez les guillemets autour de la substitution de commande.

Par ailleurs, la première commande que vous avez affichée ne fonctionne pas. Les guillemets simples empêchent les antisèches d'être évaluées localement.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X