2010-03-26 2 views
2

wrapper 쉘 스크립트에서 Java 프로그램을 호출합니다. 유닉스 쉘 스크립트가 EMAIL 인수를 제외한 모든 인수를 Java 프로그램에 전달하기를 원합니다. 어떻게 EMAIL 인수를 제거하고 나머지 인수를 Java 프로그램에 전달할 수 있습니까? EMAIL 인수는 어느 위치 에나 올 수 있습니다.쉘 스크립트가 인수의 서브 세트를 전달합니다.

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]" 

답변

1

그냥 "-EMAIL"옵션을 제거 하시겠습니까? "-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에는 첫 번째 인수가 할당됩니다. then args = $ {args/-EMAIL /} 위의 내용을 수행하려고합니다. – Arav

+0

"-EMAIL"이 $ args에서 발견되면 제거하십시오 (공백으로 대체하십시오) – ghostdog74

+0

EMAIL 인수는 첫 번째 또는 두 번째 또는 ... (선택 사항)에 나타날 수 있습니다. 위의 프로그램을 제거하고 나머지를 프로그램에 넘기는 방법은 무엇입니까? – Arav

1

bash를 사용하는 경우 다음 스 니펫을 사용할 수 있습니다. 배열을 사용하면 위치 인수에 공백이있을 경우 발생할 수있는 문제를 해결할 수 있습니다.

원래 예제에서 전달 된 위치 인수는 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

korn shell을 사용하고 있습니다. 작동할까요? – Arav

+0

필자는 데비안 레니 시스템에서/bin/bash를/usr/bin/ksh로 바 꾸었습니다. –

+0

이 $ {arg [@]}는 무엇을 의미합니까? @는 배열에있는 값의 수를 나타냅니다? 주 "$ @"후 echo "$ {arg [@]}"를 사용하면 은 전역 변수로 사용하면 좋습니다. 함수 main을 호출하고 싶습니다. 그런 다음 인수를 사용하여 Java 프로그램을 호출해야합니다. – Arav

관련 문제