2

我目前正在使用管道输入/输出流原理来读取和写入使用 JSCH 的 shell 通道。

问题:当我将 shell 的响应传输到 jQuery 终端时,我的 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 输出控制台中打印相同的字符串时,它可以工作。

Java的System.out: 在此处输入图像描述

更新 2: 我已经导入了 unix_formatting.js 文件,它几乎是固定的。这个文件的问题是它对 unix 转义码的支持有限。js链接:https ://unpkg.com/jquery.terminal@1.23.2/js/unix_formatting.js

目前看起来像这样: 在此处输入图像描述

如何在 jQuery 终端中解决此问题?

4

1 回答 1

2

您遇到的问题是,默认情况下 jQuery 终端不支持 ANSI 转义码,但您可以通过包含 unix_formatting.js 文件来启用基本支持,该文件是使用 UMD 创建的,因此您可以将其导入并在 Webpack 或 Rollup 中使用使用脚本标签捆绑或包含它:

最简单的是使用 unpkg.com:

<script src="https://unpkg.com/jquery.terminal/js/unix_formatting.js"></script>

您还可以使用与主文件相同的 CDN(jsDeliver 或 cdnJS)

我认为这cdn.rawgit.com将持续到 2019 年 10 月,所以最好不要使用那个。

但是,jQuery 终端无法做到的一件事是,您将永远无法在浏览器的终端中显示交互式 shell 命令。该库是为在 JavaScript 中编写您自己的命令而创建的,基本支持 unix_formatting 文件中的 shell 命令。

如果你想在浏览器中拥有完整的 unix 终端,更好的选择是xterm.js,它是真正的 tty。如果您可以运行服务器,如果您正在运行 java,您可能可以运行,那么 xterm.js 会好得多。您甚至可以运行viemacs -nw使用它。

于 2018-11-29T20:29:44.530 回答