Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
流执行javajssh_Java_Unix_Ssh_Jsch - Fatal编程技术网

流执行javajssh

流执行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

我对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块”在前几行之前执行
runload
是在表中加载信息的脚本,是执行加载的先决条件。在这种情况下,
executeload
将抛出
java.lang.NullPointerException


我的问题是:这是一种控制这段代码流的方法吗?上一行是下一行的先决条件。我的意图是在最后执行当前命令时执行下一行。

println只向服务器发送(“类型”)命令。它不会等待命令完成

实际上,没有办法等待命令完成。“shell”只是一个有输入和输出的黑盒子。甚至无法判断输出的哪些部分对应于哪个输入

通常,您应该使用“exec”通道实现自动化。“外壳”通道用于实现交互式终端

“exec”通道用其命令关闭,因此您可以清楚地知道命令已完成。然后,您可以打开一个新的“exec”通道以获取更多命令


另见


使用
sudo
,事情会变得复杂


请参阅。

println
只向服务器发送(“类型”)命令。它不会等待命令完成

实际上,没有办法等待命令完成。“shell”只是一个有输入和输出的黑盒子。甚至无法判断输出的哪些部分对应于哪个输入

通常,您应该使用“exec”通道实现自动化。“外壳”通道用于实现交互式终端

“exec”通道用其命令关闭,因此您可以清楚地知道命令已完成。然后,您可以打开一个新的“exec”通道以获取更多命令


另见


使用
sudo
,事情会变得复杂


请参阅。

大多数情况下,您不必担心这一点。编译器可以通过改变语句的执行顺序来优化执行时间。在我的例子中,这很重要。我认为执行流程是按顺序进行的,这样一来,每一行代码都是下一行代码的先决条件。编译器可以通过改变语句的执行顺序来优化执行时间。在我的例子中,这很重要。我认为执行流程是顺序的,这样每一行代码都是下一行代码的先决条件。