2011-01-11 3 views
4

Quand je lance ce qui suit de ma coquille bash:Run commande 'export' sur SSH

bash -c '(export abc=123 && echo $abc)' 

La sortie est "123". Mais lorsque je le lance ssh:

ssh remote-host "bash -c '(export abc=123 && echo $abc)'" 

Il n'y a pas de sortie. Pourquoi est-ce? Y a-t-il un moyen de contourner ceci? Autrement dit, existe-t-il un moyen de définir une variable d'environnement pour une commande que je cours sur ssh?

Remarque: Lorsque je remplace echo $abc par quelque chose de standard comme echo $USER, la commande ssh imprime le nom d'utilisateur sur la machine distante comme prévu car elle est déjà définie.

Je suis en cours d'exécution RHEL 5 Linux avec OpenSSH 4.3

Répondre

11

C'est parce que lors de l'utilisation

ssh remote-host "bash -c '(export abc=123 && echo $abc)'" 

la variable s'étendue par la coquille locale (comme il est le cas $USER) avant ssh exécute. Échapper à la $ en utilisant \$ et il devrait faire bien

ssh remote-host "bash -c '(export abc=123 && echo \$abc)'" 

Sur une note latérale:

  • Vous n'avez pas besoin d'exporter juste pour cela.
  • Vous n'avez pas besoin de l'envelopper dans()

comme ceci:

ssh remote-host "bash -c 'abc=123 && echo \$abc'" 

Heck, vous pouvez même laisser de côté les choses bash -c ..., comme les états de pages de manuel ssh:

Si la commande est spécifiée, elle est exécutée sur l'hôte distant au lieu d'un shell de connexion.

Mais ceux-ci peuvent être spécifiques à votre tâche;)

+0

excellent, merci! il y a beaucoup plus dans ce que je fais, donc je vais devoir utiliser 'bash -c' et 'exporter', mais cela devrait certainement le résoudre. – aaronstacy

+0

Oui, c'est logique :). Bonne chance. –