我正在为我的项目使用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;
}