流执行javajssh
我对Java非常感兴趣,所以如果这是一个愚蠢的问题,请原谅。 我有以下代码,执行流程与我的意图不同:流执行javajssh,java,unix,ssh,jsch,Java,Unix,Ssh,Jsch,我对Java非常感兴趣,所以如果这是一个愚蠢的问题,请原谅。 我有以下代码,执行流程与我的意图不同: channel = session.openChannel("shell"); OutputStream ops = channel.getOutputStream(); PrintStream ps = new PrintStream(ops, true); channel.connect(); String sudo = "sudo su - user"; String copy = "c
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块”在前几行之前执行runload
是在表中加载信息的脚本,是执行加载的先决条件。在这种情况下,executeload
将抛出java.lang.NullPointerException
我的问题是:这是一种控制这段代码流的方法吗?上一行是下一行的先决条件。我的意图是在最后执行当前命令时执行下一行。println只向服务器发送(“类型”)命令。它不会等待命令完成 实际上,没有办法等待命令完成。“shell”只是一个有输入和输出的黑盒子。甚至无法判断输出的哪些部分对应于哪个输入 通常,您应该使用“exec”通道实现自动化。“外壳”通道用于实现交互式终端 “exec”通道用其命令关闭,因此您可以清楚地知道命令已完成。然后,您可以打开一个新的“exec”通道以获取更多命令 看
另见
使用
sudo
,事情会变得复杂
请参阅。
println
只向服务器发送(“类型”)命令。它不会等待命令完成
实际上,没有办法等待命令完成。“shell”只是一个有输入和输出的黑盒子。甚至无法判断输出的哪些部分对应于哪个输入
通常,您应该使用“exec”通道实现自动化。“外壳”通道用于实现交互式终端
“exec”通道用其命令关闭,因此您可以清楚地知道命令已完成。然后,您可以打开一个新的“exec”通道以获取更多命令
看
另见
使用
sudo
,事情会变得复杂
请参阅。大多数情况下,您不必担心这一点。编译器可以通过改变语句的执行顺序来优化执行时间。在我的例子中,这很重要。我认为执行流程是按顺序进行的,这样一来,每一行代码都是下一行代码的先决条件。编译器可以通过改变语句的执行顺序来优化执行时间。在我的例子中,这很重要。我认为执行流程是顺序的,这样每一行代码都是下一行代码的先决条件。