我正在为运行 RedHat 的服务器设计一个控制台应用程序。最终用户应该能够使用他们选择的任何终端运行此应用程序。(例如;Gnome 终端、Putty SSH/ Telnet、MS Telnet 客户端等)。
在大多数终端应用程序中没有任何问题,但是当我从 MS telnet 会话启动我的程序时,我注意到我的特殊输入System.in
并System.console()
完全搞砸了。退格键将写入^H
屏幕,其他键也会写入乱码。
我已经对它进行了足够的破解,以至于我可以让它始终如一地工作,但我确信我正在做的事情很糟糕:
if (!System.getenv("TERM").equals("xterm"))
{
System.out.println("\nWARNING: The TERM type is now set to xterm\n");
final String[] cmd = { "/bin/sh", "-c", "export TERM=xterm" };
Runtime.getRuntime().exec(cmd);
}
对于不支持的终端,这里会有问题xterm
吗?我注意到 Microsoft Telnet 客户端不允许您在开始会话之前将TERM
类型设置为。xterm
但是,一旦会话开始,设置TERM=xterm
似乎可以解决问题。
大多数控制台应用程序如何解决这个问题?