【发布时间】:2020-12-15 13:39:05
【问题描述】:
我需要在文件 constants.js 中有带引号的变量(“此处变量”)。尝试在 dockerfile 中执行此操作,但得到他的错误,无法弄清楚。尝试转义引号,但它不起作用。用双引号做 - 有效,但我需要单引号。有什么想法吗?
FROM debian:stretch-slim
ENV GIT_BRANCH=develop
ENV GIT_COMMIT_TAG=26bf94075e6d5f2c575a291680e905e15aa0c81f
COPY constants.js .
RUN { \
/bin/bash -c '{ \
sed -i -r "s/^([[:blank:]]*APP_VERSION:[[:blank:]]*).*/\1\'\${GIT_COMMIT_TAG:0:7}\',/" constants.js ; \
}' ; \
}
CMD ["sleep", "inf"]
文件 constants.js 看起来像:
const constants = {
APP_NAME: 'app',
APP_VERSION: '10.0.0',
};
module.exports = {
constants,
};
#UPDATE1
更长
/bin/bash -c
在 Dockerfile 中:
if [ ! -z "$GIT_BRANCH" ]; then \
GIT_BRANCH="${GIT_BRANCH}/" ; \
fi ; \
echo "${GIT_BRANCH}${GIT_COMMIT_TAG:0:7}" > .release.txt ; \
sed -i -r "s/^([[:blank:]]*APP_VERSION:[[:blank:]]*).*/\1'\${GIT_COMMIT_TAG:0:7}',/" constants.js ; \
appver=$(awk '"'"'/APP_VERSION/ { print $2 }'"'"' constants.js) ; \
echo "${appver:1:-2}" > .appversion ; \
这就是我使用 bash -c 的原因。
【问题讨论】:
-
嗯...很难跟踪引用。您是否在
GIT_COMMIT_TAG周围的单引号前尝试了双反斜杠?\\'\${GIT_COMMIT_TAG:0:7}\\' -
为什么要运行 /bin/bash?做什么的?重点是什么?为什么不只是命令?
-
@maitza 为什么不只是
RUN sed ...?! -
对不起,这不仅仅是 sed,我做了更多的 bash 命令,这就是我使用 bash -c 的原因。
标签: bash docker shell dockerfile posix