Выполнение команд с использованием expect4j

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

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

 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);

Теперь проблема в том, что я не могу выполнять команды из arrayList, не выходя из оболочки 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 и вернулся к исходной оболочке, а во втором выполнении он пытается запустить:
"set sf [$bps createSuperflow..." в исходная оболочка.
Я предполагаю, что строка:
cmdsToExecute.add("bpsh");
не существует.

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


person saeed hardan    schedule 27.11.2014    source источник


Ответы (1)


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

Что-то типа...

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");
person wolfhammer    schedule 02.12.2014