Bash
這個腳本(open-switch/opx-build/scripts/opx_run)如何傳遞變數?
像許多 bash 問題一樣,我 100% 確定有答案,但在Google上搜尋它們是具有挑戰性的。
我正在嘗試理解以下腳本:
#!/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
命令感到困惑——特別是關於ARCH
、DIST
、OPX_RELEASE
等的部分。那些不應該被附上${}
嗎?如果不是,這些變數是如何傳遞的?
如果你仔細看,你會發現這些變數的使用是在命令的一個
-e
選項中docker-run
。此選項用於使環境變數可用於容器。所以在這裡,腳本指定了應該傳遞給容器的環境變數的名稱,而不是值本身(正如你所說的那樣,它需要取消引用,如
$ARCH
or${ARCH}
)。您可以查看docker 文件以進一步閱讀。