Linux = Y a-t-il quelque chose comme un "Java Shell" au lieu d'autres shells linux?


8

Le langage de programmation que je connais le plus est Java. Actuellement, je dois écrire pas mal de "scripts shell" pour automatiser mes serveurs. Existe-t-il quelque chose comme un "Java Shell" pour que je puisse écrire les scripts shell en Java?


16
Si vous n'avez qu'un marteau, tout ressemble à un clou . Il est peut-être temps pour vous d'apprendre de nouveaux langages de programmation, spécialement ceux qui conviennent mieux à votre travail actuel.
Juliano

Avez-vous déjà remarqué que les marteaux sont de toutes formes et tailles, de sorte que vous pouvez en choisir un qui convient au travail à accomplir?
John Gardeniers

Je pense que le fait est que, parfois, nous devons monter des vis.
DutchUncle

Eh bien, en ce qui concerne le marteau: la normalisation est / peut être l'un des "principes de réussite" clés. Bien sûr, il y a toujours quelque chose de plus spécialisé et de plus approprié, mais cela ajoute beaucoup de frais généraux dans la plupart des cas ... Mon problème est que je n'ai en fait besoin que de prototyper quelque chose. Je ne suis PAS un programmeur, je suis plutôt un gars de "l'économie des affaires" ... Donc un shell java (avec une frappe lâche ...) aurait été formidable ... Merci pour toutes vos réponses ...
jens

2
Il y a une grande différence entre utiliser java comme shell de commande et utiliser java comme langage de script.
tylerl

Réponses:


4

Vous pouvez devenir groovy et utiliser groovysh. J'ai fait certaines choses avec ça, mais je trouve que perl ou bash / sh sont les plus utiles pour faire des scripts d'administration. Un langage d'application comme Java ajoute beaucoup de surcharge lorsque tout ce que vous avez à faire est d'exécuter des commandes du système d'exploitation et de rechercher du texte.


+1 pour Groovy. Il vous permet d'accéder à la JVM et à l'API Java complète, bien qu'avec la syntaxe Groovy. Mais si vous êtes un développeur Java, ce n'est pas si difficile que ça. L'une des grandes pressions pour Groovy est la possibilité d'écrire des scripts indépendants du système - pour le déploiement, pour les tests, pour n'importe quoi. Meilleure partie - fonctionne sur Windows, Linux et OS X sans changer de source. Oh, et oui, vous pouvez utiliser Cygwin sur Windows pour exécuter des scripts basés sur Nix, mais vous devrez alors gérer Cygwin (pas amusant).
Mike

En fait, il est vrai qu'il est très difficile de remplacer les scripts bash par groovysh. Mais c'est le pas dans la bonne direction et il semble qu'il y en ait (bien que des témoins discontinus) pour le faire fonctionner plus comme un vrai shell (par exemple "grash") ... Au final, je vais devoir apprendre bash. Mais je n'avais pas entendu parler de groovysh et je pense que c'est la meilleure tentative d'avoir un "shell java" ...
jens

11

Il n'y a aucune exigence réelle que les "scripts shell" doivent être écrits dans un langage shell, vous pouvez tout faire avec C ou même Assembler, si vous aimez ça.

Dans le contexte des scripts shell, le shell n'est rien de plus qu'un interpréteur pour un langage de programmation, tout comme Perl ou PHP, mais fortement optimisé pour le type de travail que vous effectuez principalement avec un script shell.

À long terme, je suggère que vous appreniez le bash ou quelque chose, ce qui n'est pas vraiment difficile parce que les obus sont très limités dans leurs capacités de sorte qu'il n'y a pas trop à apprendre.


1
Le principal problème avec l'écriture de programmes administratifs dans une langue autre que c ou un shell est de s'assurer que le runtime est disponible pour votre langue. La plupart des systèmes Linux sont livrés avec bash, csh, perl et parfois python au moment de l'installation, mais ils n'auront pas java.
Jeff Strunk,

3

Certaines des langues jvm plus légères ont des shells, mais ce sont des frontaux pour l'interpréteur, pas des dialectes personnalisés pour l'administration système. Un bon shell système doit avoir une excellente prise en charge des processus et des descripteurs de fichiers et avoir une syntaxe et des fonctions intégrées concises, et je ne pense pas que cela existe en Java.

Vous pouvez mélanger la programmation avec le script avec des choses comme chef, marionnette, vlad, etc., mais cela signifie d'abord apprendre le script bash, car ces langages délèguent très raisonnablement les commandes au shell. Les langages comme Ruby, Perl et Python sont moins verbeux et vous les verrez beaucoup utilisés. La verbosité de Java et certaines de ses valeurs fondamentales (faites tout dans le jvm, ne quittez pas l'ide) le rendent très mal adapté à la tâche.


3

Oui il y a. J'utilise BeanShell de temps en temps, même s'il n'est pas en cours de développement actif pour le moment. Il s'agit d'un interpréteur pour la syntaxe Java standard et est également fourni avec un interpréteur / environnement graphique, si nécessaire.

Vous pouvez écrire vos scripts shell comme décrit dans les documents BeanShell , mais vous devrez mettre le fichier jar Beanshell à la disposition de votre installation Java pour cela (par exemple, le placer dans le /ext/libdossier de votre installation JRE), sinon java ne trouvera pas la bsh.Interpreterclasse .

Cependant, je recommanderais également de regarder de plus près vos options de filtrage de shell (vous n'avez pas mentionné votre environnement, mais la recommandation de TiZon avec bash est cool lorsque vous utilisez Linux). L'utilisation d'un langage de programmation polyvalent comme Java ne gênera que lorsque vous tenterez d'être productif avec des tâches de type shell, par exemple en déplaçant des fichiers, en invoquant des commandes et autres.



2

J'ai écrit jpad.io pour permettre l'exécution de "scripts shell" java et d'extraits interactifs tout en fournissant une belle visualisation des résultats. Cela montre ce que je veux dire:

JPad ​​Java REPL

Pour copier un fichier en l'utilisant comme langage de script, vous utiliseriez: 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 vous pouvez également exécuter à partir de la ligne de commande en tant que:

 > 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

0

Oui, ajoutez le beanshell .jar dans votre répertoire Javahome / jre / lib / ext et vous pourrez alors lancer des scripts comme ceci:

java bsh.Interpreter myscript.bsh

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.