docker - Dockerfile 字符串插值工作
问题描述
我一直在尝试Dockerfile
使用以下命令运行。
RUN NODE_VERSION=$( \
curl -sL https://nodejs.org/dist/latest/ | \
tac | \
tac | \
grep -oPa -m 1 '(?<=node-v)(.*?)(?=-linux-x64\.tar\.xz)' | \
head -1 \
) \
&& echo $NODE_VERSION \
&& curl -SLO "https://nodejs.org/dist/latest/node-v$NODE_VERSION-linux-x64.tar.xz" -o "node-v$NODE_VERSION-linux-x64.tar.xz" \
&& curl -SLO "https://nodejs.org/dist/latest/SHASUMS256.txt.asc" \
&& gpg --batch --decrypt --output SHASUMS256.txt SHASUMS256.txt.asc \
&& grep " node-v$NODE_VERSION-linux-x64.tar.xz\$" SHASUMS256.txt | sha256sum -c - \
&& tar -xJf "node-v$NODE_VERSION-linux-x64.tar.xz" -C /usr/local --strip-components=1 \
&& rm "node-v$NODE_VERSION-linux-x64.tar.xz" SHASUMS256.txt.asc SHASUMS256.txt
但是,由于某种原因,我看到了echo $NODE_VERSION
版本详细信息的输出,但是NODE_VERSION
后续 curl 命令中没有详细信息。可能出了什么问题?
解决方案
看起来您分配给的输出$NODE_VERSION
包含一个换行符,这将导致您的大多数命令出错。
您可能希望从输出中去除换行符。类似于以下内容:
NODE_VERSION=$( \
curl -sL https://nodejs.org/dist/latest/ | \
grep -oPa -m 1 '(?<=node-v)(.*?)(?=-linux-x64\.tar\.xz)' | \
head -1 | \
tr -d '\r\n' \
)
现在应该可以在没有任何换行符的情况下获得您的输出。我删除了tac | tac
似乎多余的。
推荐阅读
- angular - 意外值中的错误'SomeModule in C:/Users/... 请添加 @NgModule 注释
- python-3.x - Azure selenium 管道凭据失败
- javascript - React Hook useEffect 缺少带有 redux 函数的依赖道具
- vuejs3 - 如何渲染 Primevue 按钮?
- azure-devops - 我可以强制 ADO 忽略构建代理的需求吗?
- javascript - Django 中的 Ajax 正在创建重复元素
- c# - 如何注册多个热键?
- android - Flutter - 无法启动浏览器。确保您使用的是最新的 Chrome 或 Edge
- ubuntu - 使用 web3.eth 获得不一致的响应
- python - 熊猫数据框到多键字典