JSCH Library:在阅读readLine()时获取奇怪的角色

时间:2017-01-06 12:20:15

标签: java

我正在为我的项目使用jsch库。 Jsch提供两个通道EXEC和SHELL。

我想得到linux环境变量,即:echo $ FILE_EDIITON 这对exec来说是不可能的。但SHELL可以做到。

问题在于,在调用readline()方法时,它在调试工具提示的行首处显示不同的字符(您可以通过点击链接在下面的图片中看到)。但是当我在控制台上打印相同的行时。它没有在控制台中显示那些不同的角色。它完全按照我想要的印刷。

这就是我在eclipse中的调试工具提示中看到的。

[H [J [applmgr @ codezen~] $

在控制台上打印相同的行时

[applmgr @ codezen~] $

因此我的if条件不满足 isIgnoreLine()方法

希望您理解我的问题和英语。

这是我的示例代码。

@Override
public void run() {
    try {
        InputStreamReader inputStreamReader = new InputStreamReader(this.inputStream, "UTF-8");
        System.out.println(inputStreamReader.getEncoding());
        BufferedReader dataIn = new BufferedReader(inputStreamReader);
        BufferedWriter dataOut = new BufferedWriter(new OutputStreamWriter(this.outputStream));
        String line = null;
        while (isRunning) {
            if (this.isCommandExecution) {
                dataOut.write(this.command + "\r\n");
                dataOut.flush();
                this.isCommandExecution = false;

                this.output = new StringBuffer();
                while ((line = dataIn.readLine()) != null) {
                    System.out.println(line);
                    if (this.command.trim().equals(SSHClient.LINUX_COMMAND_CLEAR)) {
                        if (!line.trim().isEmpty() && line.contains(SSHClient.LINUX_COMMAND_CLEAR)) {
                            String[] arr = line.trim().split(" ");
                            if (arr[arr.length - 1].trim().equals(SSHClient.LINUX_COMMAND_CLEAR)
                                    && line.trim().length() != SSHClient.LINUX_COMMAND_CLEAR.length()) {
                                String tempStr = "";
                                for (int i = 0; i < arr.length - 1; i++) {
                                    tempStr += arr[i] + " ";
                                }
                                if (!tempStr.trim().isEmpty()) {
                                    this.terminalPrompt = tempStr.trim();
                                }
                            }
                        }
                        if (this.terminalPrompt != null) {
                            System.out.println("Break...");
                            break;
                        }
                    } else {
                        if (!isIgnoreLine(line, this.command)) {
                            System.out.println("Output..." + line);
                            this.output.append(line);
                        }
                    }
                }
                this.isResponseReady = true;
            }
        }
        dataOut.close();
        dataIn.close();
    } catch (Exception ex) {
        ex.printStackTrace();
    }
}

public boolean isIgnoreLine(String line, String command) throws Exception {
    if (this.terminalPrompt == null) {
        throw new Exception("Terminal Prompt is not found");
    }
    if (this.terminalPrompt.equals(line.trim())) {
        return true;
    } 
    return false;
}

Please click here to see screenshot

0 个答案:

没有答案