我正在创建自己的基于Java的术语程序,它适用于SSH和Telnet连接。 但现在我想打开像xterm或gnome-terminal这样的本地直接连接。 我用ProcessBuilder运行“bash -i -l”并使用getInputStream()/ getOutputStream()它似乎工作。 (我需要调用redirectErrorStream(true)) 我唯一的问题是bash似乎忽略了TERM环境变量,并且没有生成任何ANSI代码。我得到一个提示,但运行'ls -la'缺少CR和颜色。此外,它不会回显输入(就像通过SSH连接一样)。
我使用JCraft的JSch库并为SSH连接调用setPtyType(“vt100”)。 在直接运行bash时我该怎么做?
我没有使用pty,需要吗?分配一个pty需要我认为的本机代码。 如果是这样,pty的工作方式。
我试过看xterm的源代码,但这很麻烦。现在我记得为什么我永远不会回到C代码。
是否有一个简单的解决方案。
感谢。
答案 0 :(得分:0)
就ls
而言,ls
可能是ls --color=auto
的别名(您可以通过在终端中运行alias ls
来检查此问题)。在这种情况下,ls会做出有根据的猜测是否输出颜色代码。来自man ls
:
默认情况下,禁用使用颜色来区分文件类型 和--color =从不。使用--color = auto,ls会发出颜色代码 仅当标准输出连接到终端时。
许多其他程序可能会做这种事情。
就你对终端仿真的一般研究而言,“终结者”似乎做了一些pty仿真(虽然使用了JNI库),也许你可以从中得到一些想法: