繁体   English   中英

流程执行Java JSsh

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM