Насколько я знаю, bash, к сожалению, не поддерживает конструкции, подобные ассоциативным массивам, которые могли бы быть возможным решением, предшествующая версия 4.
Если пути для сред выглядят одинаково, Вы можете написать это так:
#!/bin/sh
base_path="/tmp/in"
dev_env="dev"
simu_env="simu"
run() {
cd /tmp/in/current; java -Dlog4j.configurationFile=/tmp/in/logging/log4j2_Importer.xml -Djava.security.egd=file:///dev/urandom -classpath /tmp/in/runner/lib/*:/tmp/in/lib/* baag.runner.Application --config /tmp/in/config/import.$1.properties.TODO --workflow import --inputDir "$base_path/$1"
}
mode=$1
case "$mode" in
"$dev_env" | "$simu_env" )
run "$mode"
;;
*) echo "error: invalid mode" >&2
exit 1
;;
esac
Примечание. В этой реализации вам придется передавать dev
или simu
в сценарий, а не весь путь. Если вам нужно пройти полный путь, вы должны изменить "$dev_env" | "$simu_env" )
на "$base_path/$dev_env" | "$base_path/$simu_env" )
ОБНОВЛЕНИЕ
Предполагая, что структура пути и среды фиксированы, вы может извлечь окружение с помощью простого регулярного выражения и передать его функции в качестве параметра секунды, например:
#!/bin/sh
dev_path="/data/etl-dev/in/eurex"
simu_path="/data/etl-simu/in/eurex"
prod_path="/data/etl-prod/in/eurex"
environments="(dev|simu|prod)"
run() {
cd /tmp/in/current; java -Dlog4j.configurationFile=/tmp/in/logging/log4j2_Importer.xml -Djava.security.egd=file:///dev/urandom -classpath /tmp/in/runner/lib/*:/tmp/in/lib/* baag.runner.Application --config /tmp/in/config/import.$2.properties.TODO --workflow import --inputDir "$1"
}
mode=$1
case "$mode" in
"$dev_path" | "$simu_path" )
environment=$(echo $mode | sed -E "s/.*${environments}.*/\\1/")
run "$mode" $environment
;;
*) echo "error: invalid mode" >&2
exit 1
;;
esac