2016-07-11 47 views
1

Ich habe eine .bat Datei auf meinem Windows-Rechner. Diese .bat Datei verwendet plink.exe, um eine Verbindung zu einem Ubuntu-Computer herzustellen und ein .sh-Skript auszuführen. Allerdings bekomme ich unterschiedliche Verhaltensweisen auf das Skript je nachdem, wie Plink verwendet wird:Script über Plink in .bat verhält sich anders

  1. log auf Ubuntu direkt (persönlich) - Skript erfolgreich

  2. ssh über Bitvise Client - Skript

  3. ssh über Plink erfolgreich ist (durch plink.exe Aufruf) und Skript von interaktiven Shell aufrufen (es ist ein Ubuntu-Shell innerhalb von Fenstern cmd.exe) - sc ript

  4. ssh über .bat gelingt, die dann Plink nennt - Skript fehlschlägt

Das Skript nicht w/message:

Fehler beim Shared Libraries Laden: libCint.so : kann nicht Shared Object-Datei öffnen: keine solche Datei oder das Verzeichnis

Andere Beiträge scheinen sich auf Probleme mit der Installation/Erlaubnis von libCint.so zu beziehen, aber ich weiß, dass dies nicht der Fall ist, da das Skript in anderen Fällen korrekt funktioniert, wie oben gezeigt.

Unten ist die plink.exe Linie von meiner .bat Datei:

plink.exe !plink_ssh_details! myscript 

Das obige Skript schlägt fehl, wenn auf diese Weise über .bat Datei mit dem Namen; wieder, beachten Sie, dass es gelingt, wenn direkt von der Ubuntu oder wenn ich -ssh direkt in die Ubuntu über cmd.exe (mit plink.exe) oder BitVise-Client aufgerufen wird. Jede Hilfe wäre willkommen.

Antwort

1

In den anderen Fällen verwenden Sie interaktive Sitzungen.

Während die Plink verwendet nicht-interaktive Sitzung standardmäßig, wenn Sie einen Befehl an seine Befehlszeile angeben.

Ihr Skript beruht wahrscheinlich auf einige Umgebungsvariablen (wie PATH) gezielt eingestellt werden.

Es ist ziemlich wahrscheinlich, dass die Variablen nur für interaktive Sitzungen festgelegt werden. Wahrscheinlich, weil sie in einem Startskript modifiziert werden, das nur für die interaktiven Sitzungen ausgeführt wird.

Lösungen sind:


Soem Unbekannten SSH-Server auch anders kann sich verhalten, wenn „exec“ Kanal verwendet wird, um den Befehl auszuführen. Siehe Plink : does not execute command.

+0

Dank Martin - in Bezug auf Umgebungsvariablen, musste ich $ PATH ändern, so dass alle erforderlichen/rekursiv aufgerufenen Funktionen/Skripts in der nicht interaktiven Sitzung sichtbar sind. Welche anderen Umgebungsvariablen könnten diesen Fehler verursachen? –

0

Ich musste eine Lösung hacken, um dieses Problem zu umgehen. Hinzufügen eines „-i“ -Option im Header des Bash-Skript, die ich von meiner .bat Datei wurde Aufruf hat der Trick:

#!/bin/bash -i 

Hinweis einige warnen vor unerwünschten Nebenwirkungen (nicht erwähnt Besonderheiten tho ...) wenn Sie diese Option verwenden. Wenn Sie dieses interaktive Skript jedoch von einer Remote-SSH-Sitzung aus aufrufen (z. B. bei Verwendung von plink.exe aus einer Windows-BAT-Datei und Weitergabe von Inline-Befehlen an die Unix-Box), werden alle Probleme bezüglich der Datei-/Verzeichnissichtbarkeit & behoben.

Hinweis für Benutzer: Wenn Sie ein Skript unter Unix über plink aufrufen und bemerken, dass sich das Skript nicht wie erwartet verhält, kann das Hinzufügen von "-i" beim Debuggen/Lösen Ihres Problems helfen. Beachten Sie, dass einige unerwünschte Nebenwirkungen dieses Hacks gemeldet haben, von denen sie/ich keine Ahnung haben.

+0

Die Nebenwirkungen sind in dem Link in meiner Frage erwähnt (aber nur einige werden erwähnt, eine Reihe von möglichen Problemen ist unbegrenzt). Und es ist sogar offensichtlich, dass "interaktive" Sitzungen (-i) nicht zur Automatisierung von Aufgaben verwendet werden sollten. –

+0

Martin - nicht sicher, auf welchen Link Sie verweisen. Ich habe bis jetzt keine Nebenwirkungen gesehen. Könnten Sie den Link, der die Nebeneffekte von -i in .sh-Skript-Headern enthält, verdeutlichen? –

+0

Es gibt nur einen Link in meiner Antwort. Und es beschreibt zwei von vielen möglichen Nebenwirkungen (ANSI-Sequenzen in der Ausgabe und eine Eingabeaufforderung in der Ausgabe). –