首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >dockerfile如何运行shopt -s extglob

dockerfile如何运行shopt -s extglob
EN

Stack Overflow用户
提问于 2021-12-15 09:30:06
回答 3查看 285关注 0票数 3

我有下面的Dockerfile

代码语言:javascript
复制
FROM python:3.9-slim-buster

## DO SOMETHING HERE

RUN /bin/bash -c shopt -s extglob && rm -rfv !(".env")

我得到了

代码语言:javascript
复制
Step 42/49 : RUN /bin/bash -c shopt -s extglob && rm -rfv !(".env")
 ---> Running in 5b4ceacb1908
/bin/sh: 1: Syntax error: "(" unexpected

运行此命令的HOw。我需要这个

EN

回答 3

Stack Overflow用户

发布于 2022-01-06 09:52:34

您的Dockerfile中的每个运行行都将启动一个带有单独shell的新容器。必须在shell解析输入行之前设置extglob shell选项,因此,启动该选项的方法之一是启用该选项:

代码语言:javascript
复制
RUN /bin/bash -O extglob -c 'rm -rfv !(".env")'

主要的警告是,您必须将命令行引用为字符串。

票数 0
EN

Stack Overflow用户

发布于 2021-12-15 11:37:47

我建议尽可能避免使用bash特定的语法。

在这种情况下,bash特定的glob模式!(.env)意味着“除.env之外的每个文件,所以您可以通过移动.env来完成这个特定的任务,删除整个目录,重新创建它,并将.env移回;所有这些都不用担心设置了哪些shell扩展对象。”

代码语言:javascript
复制
RUN cd .. \
 && mv the_dir/.env . \
 && rm -rf the_dir \
 && mkdir the_dir \
 && mv .env the_dir

您还可以考虑是否需要一个广泛的rm -rf。由于Docker的层系统,目录的前一个内容仍然是“在图像中”。如果您使用多级建造,那么后面的阶段将从一个干净的板子开始,您可以在任何需要的情况下使用COPY

代码语言:javascript
复制
FROM python:3.9-slim-buster AS build
...
FROM python:3.9-slim-buster
WORKDIR /app
COPY .env .
COPY --from=build ...
票数 -1
EN

Stack Overflow用户

发布于 2021-12-15 10:35:55

/bin/bash似乎适用于"shopt -s extglob“部分,而不是另一部分。把这样的线条分开:

代码语言:javascript
复制
 RUN /bin/bash -c shopt -s extglob  
 RUN /bin/bash -c rm -rfv !(".env")

代码语言:javascript
复制
RUN /bin/bash -c "shopt -s extglob && rm -rfv !(\".env\")"
票数 -2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70361248

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档