首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >流执行Java JSsh

流执行Java JSsh
EN

Stack Overflow用户
提问于 2017-07-31 21:37:36
回答 1查看 109关注 0票数 1

我对Java很不在行,所以如果这是一个空洞的问题,请原谅。我有以下代码,执行流程与我的意图不同:

代码语言:javascript
复制
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

我的问题是:这是一种控制这段代码中的流的方法吗?每一行都是下一行的前提条件。我的意图是在最后执行current时执行下一行。

EN

回答 1

Stack Overflow用户

发布于 2017-08-01 15:46:56

println只是将命令发送(“键入”)到服务器。它不会等待命令完成。

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

通常,您应该使用"exec“通道来实现自动化。"shell“通道旨在实现交互式终端。

"exec“通道以其命令结束,因此您可以清楚地知道命令已经结束。然后,您可以为进一步的命令打开一个新的"exec“通道。

参见JSch example for "exec" channel

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

不过,使用sudo会使事情变得复杂。

参见Running command after sudo login

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45417505

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档