我写了一个Java应用程序,它有一个while(input.readLine()),它会继续读取输入,直到用户键入quit命令为止。我有一个.bat脚本可以在Windows中启动它,而.sh可以在Linux中启动它。该应用程序在两种情况下均能正常工作。
在Windows中,如果键入“检查电子邮件”之类的命令并按Enter,它将执行该命令。然后,在下一个提示符(即:Java应用程序下次读取输入行)时,您可以按向上箭头,并调用您的“检查电子邮件”命令。您可以按左箭头键向左移动光标,依此类推。这正是我想要的。
但是,在Linux上,按向上键会导致^ [[D出现。左右箭头键会产生类似的ASCII输出,例如^ [[C。
我听说过stty并查看了手册页,但是无法弄清楚在启动Java应用程序时需要在.sh脚本中进行哪些更改。谁能帮我?
最佳答案
最简单的解决方案是使用外部包装器,该包装器读取具有版本功能的行,然后将其发送到您的程序。一个好的包装器是rlwrap。
使用单独的工具符合将Unix的哲学用于单独的目的(线版以及您的程序所做的任何事情)。这也很简单:只需让您的 shell 包装程序运行rlwrap myprogram
而不是myprogram
即可。
底层readline library(与Java中的任何readLine
方法都没有关系;您需要Java封装程序,例如Java-Readline)需要集成更多的工作,并将您的程序限制为GPL。仅当您想要的不仅仅是包装器可以提供的东西时才去做—主要是针对特定应用程序的补全。
关于java - 如何在Linux Shell中接受左/右/上/下箭头输入?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4630943/