我想以交互方式直接运行bash但不获取ANSI代码

时间:2012-03-31 17:51:17

标签: java bash ansi

我正在创建自己的基于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代码。

是否有一个简单的解决方案。

感谢。

1 个答案:

答案 0 :(得分:0)

ls而言,ls可能是ls --color=auto的别名(您可以通过在终端中运行alias ls来检查此问题)。在这种情况下,ls会做出有根据的猜测是否输出颜色代码。来自man ls

  

默认情况下,禁用使用颜色来区分文件类型   和--color =从不。使用--color = auto,ls会发出颜色代码   仅当标准输出连接到终端时。

许多其他程序可能会做这种事情。

就你对终端仿真的一般研究而言,“终结者”似乎做了一些pty仿真(虽然使用了JNI库),也许你可以从中得到一些想法:

http://software.jessies.org/terminator/