2010-03-26 3 views
2

A partir des scripts de shell wrapper, j'appelle le programme Java. Je veux que le script shell Unix passe tous les arguments au programme java sauf l'argument EMAIL . COMMENT Puis-je supprimer l'argument EMAIL et passer le reste des arguments au programme Java. L'argument EMAIL peut venir à n'importe quelle position.script shell passant sous-ensemble d'arguments

valArgs() 
{ 

    until [ $# -eq 0 ]; do 
     case $1 in 
      -EMAIL) 
       MAILFLAG=Y 
       shift 
       break 
       ;; 
     esac 
    done 
} 



main() 

{ 

valArgs "[email protected]" 

$JAVA_HOME/bin/java -d64 -jar WEB-INF/lib/test.jar "[email protected]" 

Répondre

1

juste pour supprimer "-EMAIL" option non? je suppose qu'il ne vient pas avec des paramètres supplémentaires après « -Email »

main(){ 
args="$1" 
case "$1" in 
    *-EMAIL*) 
     args=${args/-EMAIL/} 
esac 
$JAVA_HOME/bin/java -d64 -jar WEB-INF/lib/test.jar "$args" 
} 
+0

args est affecté avec le premier argument. puis args = $ {args/-EMAIL /} qu'est-ce que l'instruction ci-dessus essaie de faire. – Arav

+0

si "-EMAIL" est trouvé dans $ args, alors retirez-le (remplace par vide) – ghostdog74

+0

L'argument EMAIL peut apparaître en premier ou en second ou ... (facultatif). Comment puis-je changer le programme ci-dessus pour le retirer et passer le reste au programme – Arav

1

Si vous utilisez bash vous pouvez utiliser l'extrait suivant. L'utilisation de tableaux aide à contourner les problèmes qui peuvent survenir s'il y a des espaces dans les arguments positionnels. N'oubliez pas que les arguments positionnels transmis dans votre exemple d'origine ne sont conservés que pendant la durée de l'appel valArgs().


#!/bin/bash 

main() 
{ 
    # Build up arg[] array with all options to be passed 
    # to subcommand. 
    i=0 

    for opt in "[email protected]"; do 
     case "$opt" in 
     -EMAIL) 
      MAILFLAG=Y 
      ;; 
     *) 
      arg[i]="$opt" 
      i=$((i+1)) 
      ;; 
     esac 
    done 

    $JAVA_HOME/bin/java -d64 -jar WEB-INF/lib/test.jar "${arg[@]}" 
} 

main "[email protected]" 
+0

J'utilise korn shell. est-ce que ça marchera? – Arav

+0

J'ai remplacé/bin/bash par/usr/bin/ksh sur mon système Debian Lenny et cela a fonctionné pour moi. –

+0

que signifie ce $ {arg [@]}? @ indique le nombre de valeurs dans le tableau? si j'utilise echo "$ {arg [@]}" après le principal "$ @" est-ce bien comme variable globale. Je veux appeler la fonction principale et après que j'ai besoin d'appeler le programme Java avec des arguments – Arav