这个脚本(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})。

你可以看看码头工人文档供进一步阅读。

相关内容