[英]Flow execution Java JSsh
我在Java方面非常讨厌,所以如果是个假问题,请原谅。 我有以下代码,执行流程与我的意图不同:
channel = session.openChannel("shell");
OutputStream ops = channel.getOutputStream();
PrintStream ps = new PrintStream(ops, true);
channel.connect();
String sudo = "sudo su - user";
String copy = "copy from a to b;
String cd = "cd a directory";
String runload = "run a scrip in unix;
String cd1 = "cd a directoryu";
String executeload = "run a scrip in unix";
ps.println(sudo);
ps.println(copy);
ps.println(cd);
ps.println(runload);
ps.println(cd1 );
if (db.runload().contains("SUCCESS")) {
ps.println(executeload);
//execute this only if runload was success
} else {
System.exit(1);
}
关键是“ if block”在前几行之前执行。 runload
是将信息加载到表中的脚本,并且是executeload
的前提。 在这种情况下, executeload
将抛出java.lang.NullPointerException
。
我的问题是:这是控制这段代码流程的一种方法吗? 前一行是下一行的前提。 我的意图是在当前执行完毕时执行下一行。
println
只是将命令发送(“类型”)到服务器。 它不等待命令完成。
实际上,没有办法等待命令完成。 “外壳”只是带有输入和输出的黑匣子。 甚至无法分辨输出的哪些部分对应于哪个输入。
通常,您应该使用“ exec”通道进行自动化。 “外壳”通道旨在实现交互式终端。
“ exec”通道关闭其命令,因此您可以清楚地知道命令已完成。 然后,您可以打开一个新的“ exec”通道以执行其他命令。
有关“ exec”通道,请参见JSch示例 。
另请参阅JSch Shell通道,在继续进行操作之前,先逐个执行测试结果 。
使用sudo
会使事情变得复杂。
请参阅sudo登录后运行命令 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.