gpt4 book ai didi

bash - 为什么在 dockerfile run 指令的/bin/bash -c "..."部分中的 echo $VARIABLE 在 docker build 上返回空值?

转载 作者:行者123 更新时间:2023-11-29 09:40:00 24 4
gpt4 key购买 nike

问题:

观察 --- echo home--- env 之间的输出(见下文),$GOPATH 明确定义为是 $HOME。此外,echo $HOME 的输出在 --- start--- echo home 之间可见。但是, --- env--- echo gopath 之间的 echo $GOPATH 的输出是空的。为什么?

详细信息:

Dockerfile RUN 指令有问题

RUN /bin/bash -c "echo '-------------------------------------------- start' ;\
echo $HOME ;\
echo '-------------------------------------------- echo home' ;\
source $HOME/.gvm/scripts/gvm ;\
gvm use go1.5.1 ;\
env ;\
echo '-------------------------------------------- env ' ;\
echo $GOPATH ;\
echo '-------------------------------------------- echo gopath' ;\
"

超出上述指令的 docker 构建步骤

Step 5 : RUN /bin/bash -c "echo '-------------------------------------------- start' ;                  echo $HOME ;                  echo '-------------------------------------------- echo home' ;                  source $HOME/.gvm/scripts/gvm ;                  gvm use go1.5.1 ;                  env ;                  echo '-------------------------------------------- env ' ;                  echo $GOPATH ;                  echo '-------------------------------------------- echo gopath' ;                  "
---> Running in c079d62aa7eb
-------------------------------------------- start
/home/amebel
-------------------------------------------- echo home
Now using version go1.5.1
HOSTNAME=e611e15f9c9d
GVM_ROOT=/home/amebel/.gvm
LD_LIBRARY_PATH=/home/amebel/.gvm/pkgsets/go1.5.1/global/overlay/lib:
PATH=/home/amebel/.gvm/pkgsets/go1.5.1/global/bin:/home/amebel/.gvm/gos/go1.5.1/bin:/home/amebel/.gvm/pkgsets/go1.5.1/global/overlay/bin:/home/amebel/.gvm/bin:/home/amebel/.gvm/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
GVM_VERSION=1.0.22
PWD=/home/amebel
gvm_pkgset_name=global
SHLVL=1
HOME=/home/amebel
GOROOT=/home/amebel/.gvm/gos/go1.5.1
DYLD_LIBRARY_PATH=/home/amebel/.gvm/pkgsets/go1.5.1/global/overlay/lib:
gvm_go_name=go1.5.1
GVM_OVERLAY_PREFIX=/home/amebel/.gvm/pkgsets/go1.5.1/global/overlay
PKG_CONFIG_PATH=/home/amebel/.gvm/pkgsets/go1.5.1/global/overlay/lib/pkgconfig:
GOPATH=/home/amebel/.gvm/pkgsets/go1.5.1/global
GVM_PATH_BACKUP=/home/amebel/.gvm/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
_=/usr/bin/env
-------------------------------------------- env

-------------------------------------------- echo gopath
---> db5582b888ab
Removing intermediate container c079d62aa7eb
Successfully built db5582b888ab
---- Finished build of amebel/golang ----

提前致谢

最佳答案

由于您的字符串在双引号中,其中的变量将由运行命令的原始 shell 扩展,而不是由 bash -c 调用的 shell 扩展。 GOPATH 未在原始 shell 中定义。

bash -c 的参数放在单引号而不是双引号中,它将按字面意义传递给 bash

RUN /bin/bash -c 'echo "-------------------------------------------- start" ;\
echo $HOME ;\
echo "-------------------------------------------- echo home" ;\
source $HOME/.gvm/scripts/gvm ;\
gvm use go1.5.1 ;\
env ;\
echo "-------------------------------------------- env " ;\
echo $GOPATH ;\
echo "-------------------------------------------- echo gopath" ;\
'

关于bash - 为什么在 dockerfile run 指令的/bin/bash -c "..."部分中的 echo $VARIABLE 在 docker build 上返回空值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32525159/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com