from java shebang java-9 jshell

from - java execute command linux



¿Cómo ejecutar un script java con jshell? (3)

Dado que Java 9 está sobre nosotros y finalmente podemos tener un REPL de java con jshell , esperaba que hubiera una manera de agregar un shebang a un script y que jshell interpretara.

Intenté crear test.jsh :

#!/usr/bin/env jshell -s System.out.println("Hello World") /exit

Sin embargo eso da:

⚡ ./test.jsh | Error: | illegal character: ''#'' | #!/usr/bin/env jshell -s | ^ | Error: | illegal start of expression | #!/usr/bin/env jshell -s | ^ Hello World

Resulta que hay una solicitud de mejora para esto en OpenJDK https://bugs.openjdk.java.net/browse/JDK-8167440 .

Hay alguna otra manera de hacer esto?



Resulta que con un poco de engaño hay una manera, aunque no he logrado suprimir completamente los comandos interpretados, pero sí lo bastante parecido a lo que quiero.

Cambie test.jsh a:

#!/usr/bin/env sh tail -n +4 "$0" | jshell -s "$@" exit $? System.out.println("Hello World") /exit

Lo que nos da:

⚡ ./test.jsh -> System.out.println("Hello World") Hello World -> /exit


Utilizar

//usr/bin/env jshell --show-version --execution local "$0" "$@"; exit $?

como la primera línea de test.jsh . El script test.jsh podría verse como:

//usr/bin/env jshell --show-version "$0" "$@"; exit $? System.out.println("Hello World") /exit

La opción de la línea de comando --show-version es opcional, por supuesto, pero proporciona una respuesta inmediata de que la herramienta está funcionando

La opción de línea de comando adicional --execution local evita que jshell otra VM. Esto acelera el tiempo de inicio y, si el código del script lanza una excepción, la máquina virtual local se cerrará.

Consulte la salida de jshell --help y jshell --help-extra para obtener más opciones.