为了账号安全,请及时绑定邮箱和手机立即绑定

Jsch处理命令确认是或否

Jsch处理命令确认是或否

蛊毒传说 2022-11-02 10:32:17
我正在尝试使用带有 Jsch 的 linux 命令处理确认问题(y/n)。我能够在错误流中得到问题。但是在输出流中写一个'y'作为答案后,命令没有得到它。我尝试使用的 SAMPLE 命令是 'rm -i file1.txt' 并且在写入 'y' 后文件没有被删除。在确认应该从输入流中读取的“y”后,我的目标命令也会返回结果。回声 y | 使用 target 命令对我来说不是一个选项。        java.util.Properties config = new java.util.Properties();        config.put("StrictHostKeyChecking", "no");        JSch jsch = new JSch();        Session session = jsch.getSession(user, host, 22);        session.setPassword(password);        session.setConfig(config);        session.connect();        System.out.println("Connected");        System.out.println(command);        ChannelExec channel = (ChannelExec) session.openChannel("exec");        ((ChannelExec) channel).setCommand(command);        channel.setInputStream(null);        InputStream in = channel.getInputStream();        OutputStream outChannel = channel.getOutputStream();        InputStream errStream = channel.getErrStream();        PrintWriter writer = new PrintWriter(outChannel);        channel.connect();        byte[] errTmp = new byte[1024];        while (errStream.available() > 0) {            int i = errStream.read(errTmp, 0, 1024);            if (i < 0)                break;            sysout = new String(errTmp, 0, i);            System.out.println("Error Line:"+sysout);            if(sysout.toLowerCase().contains("remove regular file")) {                writer.println("y"); // Works till here but not deleting file            }        }        byte[] tmp = new byte[1024];        while (true) {            while (in.available() > 0) {                 int i = in.read(tmp, 0, 1024);                if (i < 0)                    break;                sysout = new String(tmp, 0, i);                                 System.out.println(sysout);            }
查看完整描述

1 回答

?
www说

TA贡献1775条经验 获得超8个赞

PrintWriters 除非被要求,否则不会自动刷新,所以我相信您在没有实际发送y.

您可以创建一个在使用构造函数调用PrintWriter时将自动刷新的。printlnPrintWriter(OutputStream out, boolean autoflush)

我还认为您应该避免在等待结果的循环中调用channel.disconnect()while (true)因为您可以确定一旦关闭通道就不会得到结果。


查看完整回答
反对 回复 2022-11-02
  • 1 回答
  • 0 关注
  • 343 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信