在Dockerfile中,以下行:
RUN /bin/mkdir -p /root/lib/{sh,pl,py,rb}
无法给我预期的结果。我想看看:lib/
├── pl
├── py
├── rb
└── sh
相反,我看到了:lib/
└── {sh,pl,py,rb}
这是bash特定的结构吗?我是否需要显式调用bash才能使其工作?我的Dockerfile是否正在使用其他Shell执行操作?请问这是怎么回事?我该如何解决呢?
最佳答案
是的,这是特定于bash的构造。许多Docker镜像(尤其是基于Alpine的镜像)没有bash并且不能使用其非标准扩展。在POSIX shell规范的§2.6 Word Expansions中显示了标准扩展。其中包括波浪号扩展(~/path
),参数扩展($VARIABLE
),命令替换($(foo)
),算术扩展($((1+1))
)和路径名扩展(*.c
),但不包括bash brace扩展。
shell for
循环是一个更可移植的选项:
RUN for lang in sh pl py rb; do \
mkdir "/lib/$lang"; \
done
关于bash - 在Dockerfile中,RUN/bin/mkdir -p/root/lib/{sh,pl,py,rb}未能按预期完成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64161704/