Je veux exécuter un programme Java à partir d'un script shell.so j'ai fait quelque chose comme ci-dessous
mon fichier Java test est comme suit P>
public class EchoTest { public static void main (String args[]) { System.out.println ("Value is "+(2/0)); }
4 Réponses :
Vous devez utiliser vous aurez P> system.exit (code) code> avec le code souhaité selon que si vous détectez une erreur / exception ou non
System.exit(0) // if you detect error, you need to handle exception
System.exit(1) // when no error
Je vais aussi noter ici que la plupart des programmes i> renvoie 0 lorsque le programme fonctionne avec succès et un nombre supérieur à 0 pour représenter des erreurs spécifiques.
Effacer mais il a spécifiquement mentionné 0 (zéro) lorsque mon programme Java échoue et veulent obtenir 1 (un) lorsque le programme Java s'exécute avec succès.
La documentation du programme Java dit:
Statut de sortie em> p> Les valeurs de sortie suivantes sont généralement renvoyées par le lanceur, typiquement lorsque le lanceur est appelé. Avec les mauvais arguments, des erreurs graves ou des exceptions projetées de la machine virtuelle Java. Cependant, une application Java peut choisir de renvoyer n'importe quelle valeur à l'aide du système d'appel d'API.exit (ExitValue). Em> p> Donc, si vous ne faites rien, le JVM suit la convention commune de renvoyer une valeur 0 à l'appelant sur l'achèvement de réussite et une valeur non nulle en cas d'erreur. P> Votre Le script shell devrait alors être: p> Cela signifie que vous pouvez ignorer la sortie standard et l'erreur standard et s'appuyer sur l'état de sortie de la JVM. P> Comme suggéré par @alk, vous pouvez même remplacer la première ligne avec
out = $ (Java echotest) code> et utiliser
out $ out code> dans la branche succès em> Quand
$? code> est
0 code>) p> p>
Cela pourrait également être combiné avec l'approche OP 1ère en faisant out = $ (Java echotest) code> et imprimer
out code> uniquement dans le "succès" -branch, dira si < Code> $? code> est égal à
0 code>.
@prasad: Envoyez le message d'erreur à un fichier d'erreur par rediredcting stdout code> à un fichier d'erreur tel que ceci
out = $ (Java echantest 2> error.log) code> et
CAT code>
error.log code> dans la branche "Échec" ou si vous n'êtes pas intéressé par le message d'erreur, il suffit de remplacer
error.log code> par
/ dev / null code>.
Salut @alk, tu veux dire comme ça out = $ (Java echotest 2> error.log) si [$? -eq 0] Puis echo "1" sinon error.log fi
@prasad: Il y a une légère différence lors du passage d'un fichier: vous devez éviter de commencer 2 coquilles ou plus au même moment. Mais à condition que vous ne commenciez qu'un seul, c'est certainement une solution simple et simple. Une alternative n'utilisant pas de fichier nécessiterait un programme dédié.
@SergeballESTA Pouvez-vous fournir le script?
Quoi qu'il en soit, merci beaucoup, et surtout grâce à @alk
Un exemple plus complet sur la manipulation d'un programme de la coque peut être appelez le script ci-dessus comme celui-ci p> $$ code> évalue le PID de la coque, de sorte que le code peut donc être a couru en parallèle avec des copies d'elle-même. sup> p>
Salut @alk, enfin, j'ai eu la sortie attendue de ce script,
Salut @ alk, pouvez-vous expliquer cette ligne de déclaration, cmd = "Java echotest" $ cmd> journal. $$ 2> err. $$ résultat = $?
@prasad: Pour comprendre ce qui se passe dans cette ligne, vous souhaitez lire sur Standard Streams i>. Vous pouvez le faire par exemple ici: en.wikipedia.org/wiki/standard_streams
Merci beaucoup, pour vos réponses. J'ai eu la solution avec le script suivant, mais je ne sais pas ce qui se passe ici, S'il vous plaît, expliquez-moi ce qui se passe ici.
cmd="java EchoTest" $cmd >log.$$ 2>err.$$ result=$? if [ $result -eq 0 ]; then echo "1" else echo "0" #echo $result fi rm log.$$ >/dev/null rm err.$$ >/dev/null
@prasad: Ce n'est pas vraiment une réponse, mais je comprends que vous ne pouviez pas mettre le code dans un commentaire :-). Si les commentaires ajoutés à sa réponse sont suffisants, vous devez le supprimer (et accepter la réponse de Alk ...)
Yeah @Sergeballesta, cette solution est basée sur le commentaire de Alk seulement, je viens de le modifier un peu
Erreur ne passera pas à la sortie normale, avez-vous essayé
echo $ € err code>?
Bonjour @frederichenri, merci pour votre réponse rapide, je ne veux en fait pas imprimer d'une exception du programme Java sur la console, je souhaite simplement retourner zéro sur le succès et 1 sur échec.Veuillez m'aider à faire cela
Si vous souhaitez renvoyer une valeur de retour de style UNIX, consultez System.exit (int).
Pas comme ça @ Cherch, je veux simplement imprimer zéro ou certains mon propre message d'échec lorsque le programme Java échoue
Alors pourquoi est System.out.println ("0") ne fonctionne-t-il pas pour vous?
2/0 CODE> va toujours lancer un
Arithemeticepxception code>
car les maths ne vous permettent pas de diviser par zéro.Salut @ powerlord, juste par exemple j'ai demandé que