2014-11-27 7 views
0

Я использую этот Code Example, чтобы выполнять команды в оболочке Tcl.Выполнение команд с использованием expect4j

Если вы посмотрите на основной функции вниз страницы, способ выполнения команд:

SSHClient ssh = new SSHClient("linux_host", "root", "password"); 
List<String> cmdsToExecute = new ArrayList<String>(); 
cmdsToExecute.add("ls"); 
cmdsToExecute.add("pwd"); 
cmdsToExecute.add("mkdir testdir"); 
String outputLog = ssh.execute(cmdsToExecute); 

В моей программе я делаю:

SSHClient ssh = new SSHClient("linux_host", "root", "password"); 
List<String> cmdsToExecute = new ArrayList<String>(); 
cmdsToExecute.add("bpsh"); // open Tcl Shell 
cmdsToExecute.add("set bps [bps::connect ... ]"); // Tcl shell commands 
String outputLog = ssh.execute(cmdsToExecute); 

Теперь проблема заключается в том, что я не может выполнять команды из массива без выхода из оболочки Tcl.
смысл, если я запускаю этот код:

SSHClient ssh = new SSHClient("linux_host", "root", "password"); 
List<String> cmdsToExecute = new ArrayList<String>(); 
cmdsToExecute.add("bpsh"); // open Tcl Shell 
cmdsToExecute.add("set bps [bps::connect ... ]"); // Tcl shell commands 
String outputLog = ssh.execute(cmdsToExecute); 
cmdsToExecute.clear(); 
cmdsToExecute.add("set sf [$bps createSuperflow ... ]"); 
String outputLog = ssh.execute(cmdsToExecute); 

я получить, что после первого выполнения на удаленном компьютере, она вышла из первой TCL оболочки и вернулась к исходной оболочке, а во втором Казнить пытается запустить:
"установить sf [$ bps createSuperflow ..." в исходной оболочке.
Я предполагаю, что строка:
cmdsToExecute.add ("bpsh");
не существует.

Код ожидаемого4j, который я использую, находится в ссылке выше, может ли кто-нибудь сказать мне, что мне нужно изменить, чтобы я мог выполнять множество команд с помощью ssh.execute(), не выходя из оболочки Tcl?

ответ

0

Вы можете попытаться создать файл со списком команд и исправить его.

Что-то вроде ...

cmdsToExecute.add("echo \"\" > tmpcmd.txt"); 
cmdsToExecute.add("echo \"set bps [bps::connect ... ]\" >> tmpcmd.txt"); 
cmdsToExecute.add("echo \"set sf [$bps createSuperflow ... ]\" >> tmpcmd.txt"); 
cmdsToExecute.add("bpsh"); 
cmdsToExecute.add("source tmpcmd.txt"); 
Смежные вопросы