
多くの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
コマンドを生成する方法、特に、などの部分が混乱しています。括弧で囲む必要はありませんか?そうでない場合、これらの変数はどのように渡されますか?ARCH
DIST
OPX_RELEASE
${}
答え1
詳しく見ると、これらの変数の使用がコマンド-e
のオプション内にあることがわかりますdocker-run
。このオプションは、コンテナで環境変数を使用できるようにするために使用されます。
したがって、ここでスクリプトは以下を指定します。名前値自体ではなく、コンテナに渡す必要がある環境変数の値です(正しく指摘したように、またはのように逆$ARCH
参照する必要があります${ARCH}
)。
あなたは見ることができますドッカー文書さらなる読書のため。