이 스크립트(open-switch/opx-build/scripts/opx_run)는 어떻게 변수를 전달합니까?

이 스크립트(open-switch/opx-build/scripts/opx_run)는 어떻게 변수를 전달합니까?

많은 bash 질문과 마찬가지로 답변이 있다고 100% 확신하지만 인터넷 검색은 어렵습니다.

나는 다음을 이해하려고 노력하고 있습니다스크립트:

#!/bin/bash

# available options
export OPX_GIT_TAG="${OPX_GIT_TAG:-no}"

# package distribution
export OPX_RELEASE="${OPX_RELEASE:-unstable}"
# currently tracked release
export DIST="${DIST:-stretch}"
export ARCH="${ARCH:-amd64}"

export CUSTOM_SOURCES="${CUSTOM_SOURCES:-}"

# docker image name
IMAGE="opxhub/build"
# docker image tag
VERSION="${VERSION:-latest}"

interactive="-i"
if [ -t 1 ]; then
  # STDOUT is attached to TTY
  interactive="-it"
fi

read -d '' opx_docker_command <<- EOF
docker run
  --rm
  --name ${USER}_$(basename $PWD)_$$
  --privileged
  -e LOCAL_UID=$(id -u ${USER})
  -e LOCAL_GID=$(id -g ${USER})
  -v ${PWD}:/mnt
  -v $HOME/.gitconfig:/home/opx/.gitconfig
  -v /etc/localtime:/etc/localtime:ro
  -e ARCH
  -e DIST
  -e OPX_RELEASE
  -e OPX_GIT_TAG
  -e CUSTOM_SOURCES
  ${interactive}
  ${IMAGE}:${VERSION}
EOF

if [[ $# -gt 0 ]]; then
  # run command directly
  # not using bash because tar fails to complete
  # root cause unknown (see opx_rel_pkgasm.py:tar_in)
  $opx_docker_command sh -l -c "$*"
else
  # launch interactive shell
  # using bash here because tar does not fail in an interactive shell
  $opx_docker_command bash -l
fi

docker-run명령을 생성하는 방법, 특히 , 등에 대한 부분 이 혼란스럽습니다. 괄호로 묶어야 하지 않나요? 그렇지 않은 경우 이러한 변수는 어떻게 전달됩니까?ARCHDISTOPX_RELEASE${}

답변1

자세히 살펴보면 이러한 변수의 사용이 명령 -e의 옵션 내에 있음을 알 수 있습니다 docker-run. 이 옵션은 컨테이너에서 환경 변수를 사용할 수 있도록 하는 데 사용됩니다.

따라서 여기서 스크립트는 다음을 지정합니다.이름값 자체가 아니라 컨테이너에 전달되어야 하는 환경 변수의 값입니다(올바르게 지적한 것처럼 $ARCH또는 에서 와 같이 역참조해야 합니다 ${ARCH}).

당신은 볼 수 있습니다도커 문서추가 읽기를 위해.

관련 정보