Il est assez simple d'exécuter une commande Unix depuis Java.
Runtime.getRuntime().exec(myCommand);
Mais est-il possible d'exécuter un script shell Unix à partir du code Java? Si oui, serait-ce une bonne pratique d'exécuter un script shell à partir du code Java?
Réponses:
Vous devriez vraiment regarder Process Builder . Il est vraiment conçu pour ce genre de choses.
la source
Vous pouvez également utiliser la bibliothèque exécutable Apache Commons .
Exemple :
Pour plus d'informations, un exemple est également donné sur Apache Doc .
la source
OutputStream
pour l'DefaultExecuter
utilisationDefaultExecuter.setStreamHandler
méthode pour la sortie de capture dansOutputStream
. Veuillez vous référer à ce fil pour plus d'informations: Comment puis-je capturer la sortie d'une commande ...Je dirais que ce n'est pas dans l'esprit de Java d'exécuter un script shell à partir de Java. Java est censé être multiplateforme et l'exécution d'un script shell limiterait son utilisation à UNIX.
Cela dit, il est certainement possible d'exécuter un script shell depuis Java. Vous utiliseriez exactement la même syntaxe que celle que vous avez indiquée (je ne l'ai pas essayé moi-même, mais essayez d'exécuter le script shell directement, et si cela ne fonctionne pas, exécutez le shell lui-même, en passant le script en tant que paramètre de ligne de commande) .
la source
switches
etif
déclarations pour contourner toutes les nuances qui ne fonctionnent pas exactement les mêmes sur différentes plates - formes , malgré les efforts des personnes qui sont venues avec les bibliothèques de base de java.Je pense que vous avez répondu à votre propre question avec
Quant à savoir si c'est une bonne pratique ... qu'essayez-vous de faire avec un script shell que vous ne pouvez pas faire avec Java?
la source
Oui, il est possible de le faire. Cela a fonctionné pour moi.
la source
Voici mon exemple. J'espère que cela a du sens.
la source
Oui, c'est possible et vous y avez répondu! Concernant les bonnes pratiques, je pense qu'il est préférable de lancer des commandes à partir de fichiers et non directement à partir de votre code. Donc , vous devez faire exécuter Java la liste des commandes (ou une commande) dans un existant
.bat
,.sh
,.ksh
fichiers .... Voici un exemple d'exécution d'une liste de commandes dans un fichierMyFile.sh
:la source
Pour éviter d'avoir à coder en dur un chemin absolu, vous pouvez utiliser la méthode suivante qui trouvera et exécutera votre script s'il se trouve dans votre répertoire racine.
la source
Quant à moi, tout doit être simple. Pour exécuter le script, il suffit d'exécuter
la source
La bibliothèque ZT Process Executor est une alternative à Apache Commons Exec. Il a des fonctionnalités pour exécuter des commandes, capturer leur sortie, définir des délais d'expiration, etc.
Je ne l'ai pas encore utilisé, mais il semble raisonnablement bien documenté.
Un exemple tiré de la documentation: exécution d'une commande, pompage du stderr vers un enregistreur, retour de la sortie sous forme de chaîne UTF8.
Sa documentation répertorie les avantages suivants par rapport à Commons Exec:
la source
Voici un exemple comment exécuter un script Unix bash ou Windows bat / cmd à partir de Java. Les arguments peuvent être passés sur le script et la sortie reçue du script. La méthode accepte un nombre arbitraire d'arguments.
Lors de l'exécution sous Unix / Linux, le chemin doit être de type Unix (avec '/' comme séparateur), lors de l'exécution sous Windows - utilisez '\'. Hier est un exemple de script bash (test.sh) qui reçoit un nombre arbitraire d'arguments et double chaque argument:
Lors de l'appel
sous Unix / Linux, le résultat est:
Hier est un simple script Windows cmd test.cmd qui compte le nombre d'arguments d'entrée:
Lors de l'appel du script sous Windows
La sortie est
la source
C'est possible, exécutez-le comme n'importe quel autre programme. Assurez-vous simplement que votre script a le bon #! (she-bang) comme première ligne du script, et assurez-vous qu'il existe des autorisations d'exécution sur le fichier.
Par exemple, s'il s'agit d'un script bash, mettez #! / Bin / bash en haut du script, ainsi que chmod + x.
De plus, si c'est une bonne pratique, non, ce n'est pas le cas, surtout pour Java, mais si cela vous fait gagner beaucoup de temps en portant un gros script, et que vous n'êtes pas payé en plus pour le faire;) économisez votre temps, exécutez le script, et mettez le portage vers Java dans votre liste de tâches à long terme.
la source
la source
C'est une réponse tardive. Cependant, j'ai pensé mettre la lutte que j'avais à supporter pour obtenir un script shell à exécuter à partir d'une application Spring-Boot pour les futurs développeurs.
Je travaillais dans Spring-Boot et je n'ai pas pu trouver le fichier à exécuter à partir de mon application Java et il était en train de lancer
FileNotFoundFoundException
. J'ai dû conserver le fichier dans leresources
répertoire et définir le fichier à analyserpom.xml
pendant le démarrage de l'application comme suit.error code = 13, Permission Denied
. Ensuite, j'ai dû rendre le fichier exécutable en exécutant cette commande -chmod u+x myShellScript.sh
Enfin, je pourrais exécuter le fichier en utilisant l'extrait de code suivant.
J'espère que cela résout le problème de quelqu'un.
la source
Juste la même chose que Solaris 5.10 fonctionne comme ça,
./batchstart.sh
il y a une astuce que je ne sais pas si votre système d'exploitation l'accepte à la\\. batchstart.sh
place. Cette double barre oblique peut aider.la source
Je pense avec
La vérification du système d'exploitation sur peut gérer les scripts shell / bash si ceux-ci sont pris en charge. s'il est nécessaire de rendre le code portable.
la source
pour une utilisation Linux
et pour l'utilisation;
OU
la source