сценарий оболочки, передающий подмножество аргументов - PullRequest
2 голосов
/ 26 марта 2010

Из скриптов оболочки я вызываю программу Java. Я хочу, чтобы скрипт оболочки Unix передавал все аргументы Java-программе, кроме E-mail аргумент. КАК я могу удалить аргумент EMAIL и передать остальные аргументы программе Java. E-mail аргумент может прийти на любую позицию.

valArgs()
{

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



main()

{

 valArgs "$@"

 $JAVA_HOME/bin/java -d64  -jar WEB-INF/lib/test.jar "$@"

Ответы [ 2 ]

1 голос
/ 26 марта 2010

Если вы используете bash, вы можете использовать следующий фрагмент. Использование массивов помогает обойти проблемы, которые могут возникнуть, если в позиционных аргументах есть пробелы.

Помните, что позиционные аргументы, передаваемые в исходном примере, сохраняются только в течение всего времени вызова valArgs ().


#!/bin/bash

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

    for opt in "$@"; 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 "$@"
1 голос
/ 26 марта 2010

просто удалить опцию "-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"
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...