2012-09-26 18 views
5

Necesito crear una línea de comandos de Java a la que se invocará de forma remota en un servidor. Tendrá que:Línea de comandos de Java "shell" con autocompletar

  • Leer "líneas" de texto del usuario.
  • Reconocer si el usuario presiona la tecla "tab" para facilitar el autocompletado.
  • Reconocer si el usuario presiona las teclas "arriba/abajo" para el historial.

Antes de ir fuera y rodar mi cuenta, ¿Hay alguien consciente de una biblioteca de Java que podrían facilitar la totalidad o parte de esto?

es decir, desde la línea de comandos ssh que podría tener este aspecto:

bob> java-jar MyTool.jar

MyTool iniciales.
Por favor introduzca comando:

> inicio servidor server1
partir ...
servidor comenzó

> Cuentas de carga servidor2
Hecho

> servidor3 apagado
completa

> salga

+0

Para ayudar con su búsqueda en Google, la palabra clave que está buscando es "readline", que es la biblioteca C que impulsa la línea de comando Bash, entre otros. Encontré un par de bibliotecas en línea de lectura de Java en mi respuesta, a continuación. Probablemente encuentre otros que se ajusten mejor a sus necesidades. –

Respuesta

5

Consulte JReadline y jline2.

+0

'Jreadline' muy prometedor,' jline2' parece necesitar algo de rebuscado con JNI – Jacob

+0

Parece que Jreadline ya no existe o está alojado en otro sitio. Alguna idea ? – Benoit

0

Supongo que quiere decir algo similar al intérprete de python. La razón por la cual no es equivalente en Java es porque Java necesita compilarse para bytecode antes de que pueda ejecutarse.

Si busca algo con buenas capacidades de autocompletar. Recomendaría eclipse o netbeans. También compilan su aplicación automáticamente, lo que le permite ejecutar su código rápidamente una vez que haya terminado de escribirlo.

Espero que ayude.

+0

No es exactamente lo que estaba preguntando. Pregunta editada para mayor claridad. – Jacob

+0

Oh, ya veo. Me temo que no he oído nada de eso, lo siento. –

+0

Y, por cierto, el hecho de que Java esté compilado realmente no impide tener un shell similar a Python. Scala está compilado y se ejecuta en JVM, y su REPL (read-eval-print-loop) funciona bastante bien. De hecho, a veces uso el REPL de Scala para el acceso interactivo a Java. – jbyler

1

parece que estás tratando de hacer 3 preguntas diferentes a la vez y no sabes a lo que realmente quieres una respuesta.

  • aceptar la entrada del usuario y proporcionar la función de autocompletar es trivial y altamente duda encontrará una biblioteca generalizada para una tarea tan

  • analizar las declaraciones de bash-como complejos suena como algo fresco para tener y una Puede que exista una biblioteca para hacer eso, pero no creo que te dé mucho margen para crear tu propio conjunto de instrucciones tipo bash.(Especialmente teniendo en cuenta que usted dice que tiene que ser más sofisticado que cualquier cosa que podría hacer como una escritura del golpe - que es una tarea difícil)

  • analizar la entrada del usuario simple como si se tratara de una entrada de línea de comandos o comandos es también bastante trivial, y si esto es lo que está buscando, usted debe buscar en este posible duplicado: How to parse command line arguments in Java?

recomiendo reestructuración de su pregunta para ser más específico en exactamente lo que está buscando y para evitar poner énfasis en la tarea trivial de "autocompletar" y simplemente aceptar la entrada de los usuarios en un cuadro de texto.

+0

Lo siento, no estaba nada claro. El punto dos es lo que quise decir. – Jacob

1

¿Has echado un vistazo al BeanShell? No funciona como un shell propiamente dicho (como bash o csh) pero te permite escribir comandos de Java como un intérprete y puedes usar tab para autocompletar.

Solo he usado las versiones 1.X de Bean Shell pero siempre abren una ventana para ti, así que no es algo que puedas ejecutar dentro de un shell existente.

+0

Suena realmente genial. Suena mucho más complicado que una API que admite leer líneas de texto ingresadas por el usuario, ¡pero aún vale la pena mirarlas! – Jacob

0

Me llegué tarde a la fiesta en este caso, pero agregaría Crash y Cliche a la mezcla.

0

Apache Karaf tiene un shell de comandos que se puede utilizar como una biblioteca para construir un shell de comandos para otras aplicaciones. Puede crear clases para representar comandos y usar anotaciones para especificar las opciones de los comandos. La biblioteca de Karaf proporciona la finalización de pestañas, el historial y la edición de líneas, y la capacidad de ejecutar de forma interactiva o leer archivos o argumentos de línea de comandos para ejecutarlos como un script.

Me enteré here y lo he usado en mi propio proyecto; funciona bastante bien No puedo compararlo con ninguno de los otros ya que no los he usado.

0

La biblioteca de análisis de línea de comandos de picocli de Java ha añadido recientemente funcionalidad de autocompletar. Su principal caso de uso es la creación de herramientas de línea de comandos, pero he visto que se usa integrado en una aplicación tipo concha. Lo que importa no es cómo uno lee desde System.in, sino que analiza los subcomandos, las opciones y los parámetros de la entrada del usuario.

También le puede interesar cómo le permite usar colores y estilos ANSI en el mensaje de ayuda de uso. Es posible que pueda aprovechar esto en su aplicación de shell.

enter image description here

responsabilidad: yo soy el autor y por lo tanto sesgada.

Cuestiones relacionadas