Comment automatiser cette tâche?
1) Vous êtes en A. 2) Vous ssh en B. 3) Vous exécutez un script en B, qui a besoin d'un paramètre connu en A.
Tout d'abord, j'ai pensé que je pourrais peut-être envoyer la valeur lorsque j'ai ouvert la connexion avec ssh. Ensuite, probablement plus simple, entre 1) et 2), scp l'ensemble du script au même endroit en B (en remplaçant l'ancien). Mais quand même, comment exécuter le script en B? (Autrement dit, comment automatiser cette dernière étape. Bien sûr, je pourrais l'exécuter manuellement après ssh.)
Une autre pensée, peut-être éliminer complètement ssh - j'ai une page Web sur B, donc le script pourrait-il être invoqué d'une manière ou d'une autre via une interface Web "sous le capot"?
Ou le feriez-vous d'une manière complètement différente?
Réponses:
Cela s'exécutera
myscript foobar
sur le serveur.la source
~/.elm/aliases
.)"
) par opposition à des guillemets simples ('
) est ici importante. L'utilisation de double signifie que le shell sur votre machine locale développera la variable, puis exécutera lassh
commande. Si un seul devait être utilisé, le shell local ne toucherait pas la commande, qui est envoyée textuellement mais qui est toujours développée dans le shell distant.$myparameter
contient des espaces, il se divisera côté serveur. Bashprintf
a un%q
format que vous pouvez utiliser. J'ai un exemple de code, mais il ne convient pas ici. Je vais créer une nouvelle réponse pour cela.(Ceci fait suite à mon commentaire sur la réponse acceptée .)
Notez que s'il
$myparameter
contient des espaces, il se divisera côté serveur. Le printf de Bash a un%q
format que vous pourriez utiliser. Exemple:la source
S'il est prudent de supposer que
$myparameter
seront pas contenir des guillemets simples (sinon voir ici ou utiliser laprintf '%q' ...
solution par janmoesen), vous pouvez simplement mettre des guillemets simples autour$myparameter
d'éviter le problème split sur l' espace sur le côté serveur.la source