shell 如何在bash脚本中传递附加参数

hwazgwia  于 2022-11-16  发布在  Shell
关注(0)|答案(1)|浏览(112)

我想设计一个管道来执行一个程序,这个程序可以通过参数进行多个配置。开发人员对每个参数都作为变量不感兴趣,他们希望能够通过使用管道添加多个变量。我们正在使用bash,我们的开发使用gitlab-ci,我们正在使用octopus进行uat env部署。
例如:

spark2-submit \
--master $MASTER \
--name $NAME \
--queue $QUEUE \
--conf spark.shuffle.service.enabled=true \
--conf spark.dynamicAllocation.enabled=true \
--conf spark.dynamicAllocation.executorIdleTimeout=12

正如您在上面的示例中所看到的,我希望在添加更多“--conf”参数时具有灵活性。
我是否应该有一个伪参数,然后将其添加到该命令的末尾?
例如:

spark2-submit \
--master $MASTER \
--name $NAME \
--queue $QUEUE \
--conf spark.shuffle.service.enabled=true \
--conf spark.dynamicAllocation.enabled=true \
--conf spark.dynamicAllocation.executorIdleTimeout=12 \
$additional_param

我正在使用Gitlab进行代码回购,使用Octopus进行CICD。我正在使用bash进行部署。我正在寻找一个灵活的选项,可以使用Octopus变量选项和gitlab的全部功能。您的建议是什么?您有更好的建议吗?

ibps3vxo

ibps3vxo1#

这就是Charles在“参数列表应该存储在数组中”中所暗示的:

spark2_opts=(
    --master "$MASTER"
    --name "$NAME"
    --queue "$QUEUE"
    --conf spark.shuffle.service.enabled=true
    --conf spark.dynamicAllocation.enabled=true
    --conf spark.dynamicAllocation.executorIdleTimeout=12 
)

# add additional options, through some mechanism such as the environment:
if [[ -n "$SOME_ENV_VAR" ]]; then
    spark2_opts+=( --conf "$SOME_ENV_VAR" )
fi

# and execute
spark2-submit "${spark2_opts[@]}"

bash数组定义可以包含任意空格(包括换行符),因此请格式化以提高可读性

相关问题