У меня есть скрипт с 5 обязательными параметрами (5 путей) и 3 вариантами (-d для отладки, -l для переопределения log4j, -s для другого переопределения).
Я управляю этим с помощью getopts. Следующий сценарий упрощен:
LOG4J_FILE=$DEFAULT_LOG4J_FILE
S_FILE=$DEFAULT_S_FILE
ECLIPSE_PROPS=
while getopts "l:s:d" flag; do
case "$flag" in
l) LOG4J_FILE="$OPTARG";;
s) S_FILE="$OPTARG";;
d) ECLIPSE_PROPS="-Xdebug ...";;
:) usage;;
?) usage;;
esac
done
shift $((OPTIND-1))
OPTIND=1
...
echo_and_eval $JAVA $ECLIPSE_PROPS -Dlog4.configuration=$LOG4J_FILE -Ds.file=$S_FILE -cp $CLASSPATH $MAIN_CLASS $ARGS
Если я просто поставлю 5 параметров, это сработает. Если я добавлю один или два необязательных параметра с параметрами (l или s), это сработает. Если я добавлю параметр -d, у меня не будет аргументов в основном методе Java.
Любая подсказка? Это сводит меня с ума.
bash -ex ./script.sh
, чтобы получить отладочную информацию. - person anubhava   schedule 02.10.2014