BASH:如何检查Dynamic Env变量是否设置



我正在编写一个脚本,我想动态创建一个环境变量名称,并检查是否已设置。

#!/bin/bash
#######################################
# Builds options string
# Globals:
#   JVM_OPTS_DIR
# Arguments:
#   1. Options env variable name
#   2. File containing options defaults
# Returns:
#   Options
#######################################
function buildOpts() {
  declare -n opts=$1
  declare -n excludeOpts="EXCLUDE_$1"
  local -r optsFile=$2
  local x=
  if [ -z ${excludeOpts+x} ]; then
    while read -r o; do
      if [ -n "${o// }" ]; then
        x+=" $o"
      fi
    done <"$JVM_OPTS_DIR/$optsFile"
  fi
  if [ -n "$opts" ]; then
    for o in $opts; do
      x+=" $o"
    done
  fi
  printf '%s' "$x"
}
# https://docs.oracle.com/javase/8/docs/technotes/tools/unix/java.html
# Standard options
stdOpts=$(buildOpts STD_OPTS std.opts)
...
javaCmd="java $stdOpts $nonStdOpts $advRtOpts $advCompOpts $advServOpts $advGcOpts -jar $APP_DIR/app.jar"
printf '%s' "$javaCmd"
# eval $javaCmd "$@"

上面的脚本用作Docker入门点

docker build -t jdk . && docker run --rm -it jdk -e APP_NAME=test -e APP_LOG_DIR=test -e APP_DIR=test -e STD_OPTS='a b' -e EXCLUDE_STD_OPTS=true

但是,我看不到javaCmd中包含的ab,我也看不到EXCLUDE工作。基本上,功能buildOpts中的if条件都无法正常工作。

我是后端程序员,而不是狂欢向导。帮助。

您需要将Envs标志放在图像名称之前。

docker run的语法是:

docker run [OPTIONS] IMAGE[:TAG|@DIGEST] [COMMAND] [ARG...]

图像名称之后的任何内容都将被视为[COMMAND][ARG...]

最新更新