【发布时间】:2020-02-05 10:16:30
【问题描述】:
我有以下运行正常的 shell 脚本代码。
#!/bin/sh
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.dev.properties.TODO \
--workflow import \
--inputDir "$1"
}
dev_path="/data/etl-dev/in/eurex"
simu_path="/data/etl-simu/in/eurex"
mode=$1
case "$mode" in
"$dev_path" | "$simu_path" )
run "$mode"
;;
*) echo "error: invalid mode" >&2
exit 1
;;
esac
但目前我只能在开发数据库上运行此代码,正如您在运行函数脚本中看到的那样,import.dev.properties.TODO 设置为开发。我想让它变得灵活,如果 simu_path 变量的路径是“/tmp/in/simu”,那么属性应该是import.simu.properties.TODO,而对于 dev_path,它应该是import.dev.properties.TODO,这样它将在相应的数据库上运行。
我不确定是否可以在这里设置参数化变量。例如像这样的import.${varaible_here_dev_or_simu}.properties.TODO
我想保持 dev_path 和 simu_path 原样,因为它可以更改 当我在参数中传递它时
【问题讨论】:
-
如果您将每个语句放在单独的行上,这将使您的
run函数更易于阅读。 -
import.$(basename "$1").properties.TODO? -
@TomFenech 确定我这样做了..@kamil 我会尝试使用 import.$(basename "$1").properties.TODO
-
如果是一个长命令,别忘了用
\转义换行符(我编辑这样做)
标签: bash shell command-line