Dockerfile 字符串插值 dosent 工作



我一直在尝试使用以下命令运行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 'rn' 
) 

现在应该得到没有任何换行符的输出。 我删除了tac | tac,因为这似乎是多余的。

最新更新