我使用此Code Example来执行Tcl shell中的命令。
如果查看页面中的main函数,执行命令的方法是:
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 Shell而无法从arrayList执行命令 这意味着如果我运行此代码:
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 shell并返回到原始shell,在第二次执行时它尝试运行:
&#34;设置sf [$ bps createSuperflow ...&#34;在原始的壳中。
我假设因为这条线:
cmdsToExecute.add(&#34; BPSH&#34);
不存在。
我使用的expect4j的代码在上面的链接中,有人可以告诉我需要修改的内容,以便我可以使用ssh.execute()执行许多命令而不退出Tcl shell吗?
答案 0 :(得分: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");