【发布时间】:2021-01-24 19:37:11
【问题描述】:
我的场景有点复杂:
- 我的
Dockerfile中有一个环境变量,它是一个路径:ENV ORACLE_HOME=/home/oracle - 我需要稍后做一些文件操作,所以我使用 sed
- 不幸的是,在我使用变量之前,我需要为 sed 转义路径字符
\。
这就是我所拥有的:
ENV ORACLE_HOME=/home/oracle
ENV ORACLE_HOME_ESCAPED="$(printf '%q\n' "$ORACLE_HOME")"
RUN sed 's/.*pattern.*/\"-Dsomekey='${ORACLE_HOME_ESCAPED}'\"/' file
如果ORACLE_HOME 仅包含简单字符,则RUN 行可以正常工作。
我使用printf 的转义命令在bash 中正常工作,但在Dockerfie 中不起作用。
不幸的是,我只有 GNU bash, version 4.2.46(2)-release (x86_64-redhat-linux-gnu) 并且没有 bash 4.4 的更新,所以我无法使用 ${@Q} 表示法。我使用oraclelinux:7-slim 作为基础镜像。
关于printf 有什么问题有什么建议吗?
【问题讨论】:
-
请发一个完整的minimal reproducible example。
printf '%q用于转义 shell 重新评估,而不是 sed。
标签: bash docker sed dockerfile