Я использую этот пример кода для выполнения команд в оболочке 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?