gpt4 book ai didi

java - 流程执行Java JSsh

转载 作者:太空宇宙 更新时间:2023-11-04 11:16:25 25 4
gpt4 key购买 nike

我对 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” channel 来实现自动化。 “shell” channel 旨在实现交互式终端。

“exec” channel 随其命令关闭,因此您可以清楚地知道命令已完成。然后,您可以打开一个新的“exec” channel 来执行进一步的命令。

参见JSch example for "exec" channel .

<小时/>

另请参阅JSch Shell channel execute commands one by one testing result before proceeding .

<小时/>

使用 sudo 会让事情变得复杂。

参见Running command after sudo login .

关于java - 流程执行Java JSsh,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45417505/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com