我目前正在使用管道输入/输出流principe来使用JSCH读取和写入Shell通道。
问题:当我将外壳的响应传输到jQuery终端时,我在jQuery终端中出现了奇怪的字符。
我尝试以不同的方式读取管道输入流以解决问题:
尝试1:
private synchronized String readResponse() throws IOException {
byte[] array = new byte[pin.available()];
pin.read(array);
return new String(array, Charset.forName("UTF-8"));
}
尝试2:
private synchronized String readResponse() throws IOException {
final StringBuilder s = new StringBuilder();
while(pin.available() > 0) {
s.append((char) pin.read());
}
return s.toString();
}
遗憾的是,此问题仍然存在。谁能帮我吗?
更新: 我刚刚发现,当我在Java输出控制台中打印相同的字符串时,它就可以工作。
更新2: 我已经导入了unix_formatting.js文件,它几乎是固定的。该文件的作用是它对Unix转义码的支持有限。链接到js:https://unpkg.com/jquery.terminal@1.23.2/js/unix_formatting.js
如何在jQuery终端中解决此问题?
答案 0 :(得分:2)
您遇到的问题是,默认情况下,jQuery Terminal不支持ANSI转义码,但是您可以通过包含unix_formatting.js文件来启用基本支持,该文件是使用UMD创建的,因此可以将其导入并放入其中Webpack或汇总包,或使用脚本标签将其包括在内:
最简单的是使用unpkg.com:
<script src="https://unpkg.com/jquery.terminal/js/unix_formatting.js"></script>
您还可以使用与主文件(jsDeliver或cdnJS)相同的CDN
我认为cdn.rawgit.com
可以一直使用到2019年10月,因此最好不要使用它。
但是,jQuery Terminal无法做到的一件事是,您将永远无法在浏览器的Terminal中显示交互式shell命令。创建该库是为了使用JavaScript编写您自己的命令,并基本支持unix_formatting文件中的shell命令。
如果要在浏览器中具有完整的Unix终端,最好的选择是xterm.js,它是真正的tty。如果可以运行服务器(如果正在运行Java,则可能可以),那么xterm.js会更好。您甚至可以运行vi
或emacs -nw
。