为System.in设置环境

fla*_*kes 33 java linux terminal console system.in

我正在为运行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);
}
Run Code Online (Sandbox Code Playgroud)

对于那些不支持的终端,这里会出现问题xterm吗?我注意到Microsoft Telnet客户端不允许您在开始会话之前将TERM类型设置为xterm.然而,一旦会话开始,设置TERM=xterm似乎解决了问题.

大多数控制台应用程序如何解决此问题?

g5t*_*mas -4

您应该查看这两篇文章,因为它们与您正在做的事情相关。

检查环境变量

设置环境变量

当您在 Unix 服务器(在您的情况下为 redhat)之上运行控制台时,我还建议您查看 Unix 命令 Expect,它允许您读取控制台应用程序中的输入,并根据用户的输入。

以下是命令用法的一些示例。

示例预期用法