8
votes

Comment retourner une certaine valeur à Shell du programme Java?

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));
    }


7 commentaires

Erreur ne passera pas à la sortie normale, avez-vous essayé echo $ € err ?


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 va toujours lancer un Arithemeticepxception car les maths ne vous permettent pas de diviser par zéro.


Salut @ powerlord, juste par exemple j'ai demandé que


4 Réponses :


4
votes

Vous devez utiliser system.exit (code) code> avec le code souhaité selon que si vous détectez une erreur / exception ou non

vous aurez P>

System.exit(0) // if you detect error, you need to handle exception
System.exit(1) // when no error


2 commentaires

Je vais aussi noter ici que la plupart des programmes 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.



6
votes

La documentation du programme Java dit:

Statut de sortie

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).

  • 0: achèvement réussi.
  • > 0: une erreur est survenue.

    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.

    Votre Le script shell devrait alors être: xxx

    Cela signifie que vous pouvez ignorer la sortie standard et l'erreur standard et s'appuyer sur l'état de sortie de la JVM.

    Comme suggéré par @alk, vous pouvez même remplacer la première ligne avec out = $ (Java echotest) et utiliser out $ out dans la branche succès Quand $? est 0 )


6 commentaires

Cela pourrait également être combiné avec l'approche OP 1ère en faisant out = $ (Java echotest) et imprimer out uniquement dans le "succès" -branch, dira si < Code> $? est égal à 0 .


@prasad: Envoyez le message d'erreur à un fichier d'erreur par rediredcting stdout à un fichier d'erreur tel que ceci out = $ (Java echantest 2> error.log) et CAT error.log dans la branche "Échec" ou si vous n'êtes pas intéressé par le message d'erreur, il suffit de remplacer error.log par / dev / null .


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



1
votes

Un exemple plus complet sur la manipulation d'un programme de la coque peut être xxx

$$ é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.

appelez le script ci-dessus comme celui-ci xxx


3 commentaires

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 . Vous pouvez le faire par exemple ici: en.wikipedia.org/wiki/standard_streams



0
votes

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


2 commentaires

@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