Linux = ¿Hay algo así como un "Java Shell" en lugar de otros shells de Linux?

8

El lenguaje de programación que más conozco es Java. Actualmente tengo que escribir bastantes "scripts de shell" para automatizar mis servidores. ¿Hay algo así como un "Shell de Java" para que yo pueda escribir los scripts de shell en Java?

jens
fuente
16
Si todo lo que tienes es un martillo, todo parece un clavo . Tal vez sea hora de que aprenda algunos nuevos lenguajes de programación, especialmente los más adecuados para su trabajo actual.
Juliano
¿Alguna vez notó que los martillos vienen en todas las formas y tamaños, para que pueda elegir uno adecuado para el trabajo en cuestión?
John Gardeniers
Creo que el punto es que, a veces, tenemos que colocar tornillos.
DutchUncle
Bueno, con respecto al martillo: la estandarización es / puede ser uno de los "principios de éxito" clave. Por supuesto, siempre hay algo más especializado y más apropiado, pero esto agrega mucha sobrecarga en la mayoría de los casos ... Mi problema es que en realidad solo necesito crear un prototipo de algo. Soy ningún programador Soy más una "economía de la empresa" chicos ... Así que una cáscara de java (con la tipificación suelta ...) hubiera sido genial ... Gracias por todas sus respuestas ...
Jens
2
Hay una gran diferencia entre usar java como shell de comandos y usar java como lenguaje de script.
tylerl

Respuestas:

4

Puedes ponerte maravilloso y usar groovysh. He hecho algunas cosas con eso, pero encuentro que perl o bash / sh es lo más útil para hacer scripts de administrador. Un lenguaje de aplicación como Java agrega mucha sobrecarga cuando todo lo que necesita hacer es ejecutar comandos del sistema operativo y buscar texto.

JOTN
fuente
+1 para Groovy. Le permite acceder a la JVM y a la API Java completa, aunque con la sintaxis Groovy. Pero si eres un desarrollador de Java, entonces no es tan difícil entrar. Uno de los grandes impulsos para Groovy es la capacidad de escribir scripts independientes del sistema, para su implementación, para pruebas, para cualquier cosa. La mejor parte: funciona en Windows, Linux y OS X sin cambiar la fuente. Ah, y sí, podría usar Cygwin en Windows para ejecutar scripts basados ​​en nix, pero luego tendría que lidiar con Cygwin (no es divertido).
Mike
En realidad, es cierto que es muy difícil reemplazar las secuencias de comandos bash con groovysh. Pero es el paso en la dirección correcta y parece que hay algunos (aunque intentos descontinuados) para que funcione más como un caparazón real (por ejemplo, "grash") ... Al final tendré que aprender bash. Pero no hubiera oído hablar de groovysh y creo que es el mejor intento de tener una "cáscara de java" ...
Jens
11

No existe un requisito real de que los "scripts de shell" tengan que escribirse en un lenguaje de shell, puede hacer todo con C o incluso Assembler, si así lo desea.

En el contexto de los scripts de shell, el shell no es más que un intérprete para un lenguaje de programación, al igual que Perl o PHP, pero está muy optimizado para el tipo de trabajo que realiza principalmente con un script de shell.

A largo plazo, te sugiero que aprendas bash o algo así, lo que no es realmente difícil porque los proyectiles son muy limitados en sus habilidades para que no haya mucho que aprender.

Sven
fuente
1
El principal problema con la escritura de programas administrativos en un idioma que no sea c o un shell es asegurarse de que el tiempo de ejecución esté disponible para su idioma. La mayoría de los sistemas Linux vienen con bash, csh, perl y, a veces, python en el momento de la instalación, pero no tendrán java.
Jeff Strunk
3

Algunos de los lenguajes jvm más ligeros tienen shells, pero esos son front-end para el intérprete, no dialectos personalizados para ministrar. Un buen shell del sistema debe tener un excelente proceso y soporte de descriptor de archivo y tener una sintaxis concisa y componentes incorporados, y no creo que exista en Java.

Puede mezclar programación con secuencias de comandos con cosas como chef, puppet, vlad y similares, pero eso significa aprender primero las secuencias de comandos bash, porque esos lenguajes, bastante sensatamente, delegan comandos en el shell. Lenguajes como Ruby, Perl y Python son menos detallados y verás que se usan mucho. La verbosidad de Java y algunos de sus valores centrales (hacer todo en la jvm, no abandonar el ide) lo hacen muy inadecuado para la tarea.

Tobu
fuente
3

Sí hay. He estado usando BeanShell de vez en cuando, a pesar de que no está en desarrollo activo en este momento. Es un intérprete para la sintaxis estándar de Java y también viene con un intérprete / entorno gráfico, si es necesario.

Puede escribir sus scripts de shell como se describe en los documentos de BeanShell , pero tendría que hacer que el archivo jar de Beanshell esté disponible para su instalación de Java para esto (por ejemplo, ponerlo en la /ext/libcarpeta de su instalación de JRE), de lo contrario, Java no encontrará la bsh.Interpreterclase .

Sin embargo, también recomendaría que eche un vistazo más de cerca a sus opciones de exploración de shell (no mencionó su entorno, pero la recomendación de TiZon con bash es genial cuando usa Linux). El uso de un lenguaje de programación de propósito general completo como Java solo se interpondrá cuando intente ser productivo con tareas similares a shell, por ejemplo, mover archivos, invocar comandos y similares.

Axel Knauf
fuente
2

Escribí jpad.io para permitir la ejecución de "scripts de shell" de Java y fragmentos interactivos al tiempo que proporcionaba una buena visualización de los resultados. Esto muestra lo que quiero decir:

JPad ​​Java REPL

Para copiar un archivo usando esto como un lenguaje de script, usaría: http://jpad.io/example/1I/fileio

final File file = new File("outt.csv");
Object o = new int[] {1,2,3};
JPad.writeCsv(o, file);
java.nio.file.Files.copy(file.toPath(), Paths.get("copy.csv"));

Que también puede ejecutar desde la línea de comandos como:

 > jpad fileio.jpad
 > dir
 29/04/2017  13:30    <DIR>          .
 29/04/2017  13:30    <DIR>          ..
 29/04/2017  13:30                16 copy.csv
 29/04/2017  13:30               160 fileio.jpad
 29/04/2017  13:30                16 outt.csv
Ryan Hamilton
fuente
0

Sí, agregue beanshell .jar en su directorio Javahome / jre / lib / ext y luego puede iniciar scripts de esta manera:

java bsh.Interpreter myscript.bsh
djangofan
fuente