2016-07-31 35 views
0

Ich habe ein Bash-Skript auf einem Server, der einen Befehl enthält, der nicht auf dem Standardpfad ist.Hinzufügen von Verzeichnis zu PATH beim Ausführen von Skript über JSch CommandExec

Wenn ich ein Terminal verwenden, um SSH an den Server und das Skript auszuführen, funktioniert es gut (weil das Verzeichnis, in dem sich der Befehl befindet, dem Pfad hinzugefügt wird). Wenn ich jedoch versuche, den Befehl über JSchs CommandExec auszuführen, habe ich den Fehler "Befehl nicht gefunden" erhalten.

Gibt es trotzdem, das zusätzliche Verzeichnis zum Pfad hinzuzufügen, wenn das Skript über JSch ausgeführt wird?

Beachten Sie, dass ich das Skript auf dem Server nicht ändern kann. Es muss so laufen wie es ist.

myscript.sh

... 
mycommand 
... 

JSch Code:

JSch jsch = new JSch(); 
Session session = jsch.getSession(user, host, port); 
session.connect(); 
ChannelExec channelExec = (ChannelExec)session.openChannel("exec"); 
channelExec.setCommand("/path/to/myscript.sh"); 
channelExec.connect(); 

Danke

Antwort

1

Ich denke, die einfachste Möglichkeit, das Skript

myscript.sh zu ändern wäre

. 
. 
/full/path/to/mycommand 
. 
. 

Wenn Sie das Skript direkt von der Shell ausgeführt werden Ihre Login verursacht PATH zu übernehmen, die nicht der Fall ist, wenn Sie es von JSch sind ausführen.


Eine schnelle Google gab mir diese [ article ] lesenswert.

+0

Leider, wie ich in meinen Fragen bemerkte, kann ich das Skript nicht ändern. – Ares

+0

Kannst du so etwas in 'JSch' machen? 1. lade myscript.sh 2. Im Puffer modifiziere 'command' in'/path/to/command'. 3. Dann tun Sie 'channelExec.setCommand (modified_buffer);' – sjsam