gpt4 book ai didi

java - 为 System.in 设置环境

转载 作者:IT老高 更新时间:2023-10-28 12:39:55 27 4
gpt4 key购买 nike

我正在为运行 RedHat 的服务器设计一个控制台应用程序。最终用户应该能够使用他们选择的任何终端运行此应用程序。 (例如;Gnome 终端、Putty SSH/Telnet、MS Telnet 客户端等)。

在大多数终端应用程序中没有任何问题,但是当我从 MS telnet session 启动程序时,我注意到 System.inSystem.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 客户端不允许您在开始 session 之前将 TERM 类型设置为 xterm。但是,一旦 session 开始,设置 TERM=xterm 似乎可以解决问题。

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

最佳答案

对于字符终端应用程序,通信总是有两端,它们必须就如何解释控制字符达成一致。通常双方都能够使用 termcap/terminfo 数据库中描述的各种编码。

在 Unix 服务器端,您可以通过设置 TERM 环境变量或使用 stty 来定义编码(否则使用默认值,通常是一个哑终端仿真)。

在客户端您还必须设置与服务器端相同的终端仿真。 Windows 原生 telnet 能够定义仿真(参见例如 Configure the Telnet Terminal Type),其他终端仿真器(例如 Putty)也是如此。

关于您的设计决策:上述终端设置通常只在用户文档中描述,而不是在应用程序中硬编码,以留出更大的灵 active 。毕竟,您事先并不知道您的用户将使用哪个终端(可能只是一个简单的硬件终端,支持单个 termcap 编码?)。

(由于您的问题与 Java 或 system.in 关系不大,因此您可以重新考虑使用的标签。)

关于java - 为 System.in 设置环境,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35295010/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com