如何在Linux shell中接受左/右/上/下箭头输入?

时间:2011-01-07 22:43:25

标签: java linux shell batch-file dos

我编写了一个Java应用程序,它有一段时间(input.readLine()),它继续读取输入,直到用户输入quit命令。我有一个.bat脚本在Windows中启动它,一个.sh在Linux中启动它。该应用程序在两者中都可以正常工作。

在Windows中,如果您键入“check email”之类的命令并按Enter键,它将执行该命令。然后,在下一个提示符(即:下次Java应用程序读取输入行)时,您可以点击向上箭头,它会调用您的“检查电子邮件”命令。您可以按左箭头键向左移动光标等。这正是我想要的。

在Linux上,按向上键会导致^ [[D出现。左箭头键和右箭头键产生类似的ASCII输出,如^ [[C.

我听说过stty并查看了man页面,但是无法通过启动我的Java应用程序来弄清楚我需要在.sh脚本中进行更改。任何人都可以帮助我吗?

2 个答案:

答案 0 :(得分:4)

最简单的解决方案是使用外部包装器读取具有版本功能的行,然后将其发送到您的程序。一个好的包装器是rlwrap

使用单独的工具符合unix的理念,即将单独的工具用于不同的目的(行版和您的程序所做的任何事情)。它也很简单:只需让你的shell包装器运行rlwrap myprogram而不是myprogram

底层readline library(与Java中的任何readLine方法无关;你需要一个Java包装器,如Java-Readline)更多的工作来集成,并将你的程序约束到是GPL。只有当你想要的东西超过包装器所能提供的东西时才能实现这一目标 - 主要是特定于应用程序的完成。

答案 1 :(得分:1)

readline函数用于Unices上的这些东西,但它是一个C函数。

Here你可以找到它的Java包装器。 (我从来没用过它)