簡體   English   中英

Bash:如何檢查是否設置了動態環境變量?

[英]Bash: How to check if dynamic env variable is set?

我正在編寫一個腳本,要在其中動態創建一個環境變量名稱,並檢查它是否已設置。

#!/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條件都不起作用。

我是后端程序員,而不是Bash向導。 救命。

您需要在圖像名稱之前放置envs標志。

docker run語法是:

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

圖片名稱后的任何內容都將被視為[COMMAND][ARG...]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM