题 :
观察输出之间(见下文)--- echo home
和--- env
,$GOPATH
被明确定义为是$HOME
.在addtion,输出echo $HOME
是在之间的可见--- start
和--- echo home
.但是,输出echo $GOPATH
之间--- env
和--- 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' ;\
"
Run Code Online (Sandbox Code Playgroud)
完成上述指令的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 ----
Run Code Online (Sandbox Code Playgroud)
提前致谢
由于您的字符串是双引号,因此其中的变量将由运行命令的原始shell扩展,而不是由调用的shell扩展bash -c
.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" ;\
'
Run Code Online (Sandbox Code Playgroud)