2016-05-27 8 views
0

Ich möchte über SSH verbinden und einen Befehl beim Verbinden ausführen. ich den folgenden Befehl:Ssh und run Befehl bei Verbindung

ssh Host -t „command“

aber ich brauche einige Umgebungsvariablen ändern, um den Befehl und es scheint, wie eval funktioniert nicht laufen .

ssh host -t "eval `somescript.sh tcsh`; env | grep variables_that_should be_changed" 

Es ist einfach nicht das Skript eval und sagt, dass der Befehl nicht „somescript.sh“ existiert.

Die Datei somescript.sh existiert auf der Remote-Maschine, nicht die Datei, aus der sie stammt.

Gibt es eine Möglichkeit, dies zu lösen?

+0

Was meinst du mit "Ich muss einige env variables ändern"? Müssen diese Variablen basierend auf den Bedingungen an dem Ort, an dem Sie SSHing * from * haben, geändert werden? I.e. ist es wirklich nötig, Optionen für das Skript zur Verfügung zu stellen, wie 'ssh -t remotehost" somescript.sh opt1 opt2 opt3 "'? – ghoti

Antwort

2

Legen Sie die Umgebungsvariablen fest und führen Sie den Befehl im selben Skript aus, und führen Sie das Skript über ssh aus. Die Umgebungsvariablen sind gültig, bis Ihr Skript existiert.

+0

hat funktioniert, danke! –

0

Sie haben bereits eine "beste Antwort" ausgewählt, daher hilft Ihnen meine Antwort nur zu verstehen, was falsch war.

Basierend auf dem Code in Ihrer Frage scheint es, dass Sie ein Angebotsproblem haben. Sie sagte:

ssh host -t "eval `somescript.sh tcsh`; env | grep variables_that_should be_changed" 

Wenn Sie Backticks (`...`) in doppelte Anführungszeichen haben, bekommen sie durch die Aufruf Shell erweitert anstatt die Shell Sie auf dem Remote-Server laufen lassen. Für Ihre Befehlszeile müsste somescript.sh also lokal vorhanden sein, und Sie verwenden die Befehlszeile, um die Ausgabe dieses Skripts in die Befehlszeile einzubetten, die Sie remote ausführen. Wahrscheinlich nicht was du willst.

Ungeachtet anderer syntaktischer oder prozeduraler Verbesserungen werden die Backticks, wenn Sie die doppelten Anführungszeichen durch einfache Anführungszeichen ersetzen, als Teil der Befehlszeile, die Sie remote ausführen, statt lokal expandiert.

Wenn Sie Backticks verwenden, sollten Sie sie stattdessen auch durch die Notation $(...) ersetzen. Es ist einfacher zu lesen, kann geschachtelt werden und wird allgemein als der "bessere Weg" mit modernen Shells betrachtet.

+0

Danke für die Erklärung Kumpel, das hat mir sehr geholfen –