我想有條件地評估一個變數以在我的 docker 映像構建中使用
RUN ARCHFLAG="$(uname -m)" && ARCH=$([ $ARCHFLAG == "aarch64" ] && echo "arm64" || echo $ARCHFLAG) && curl -sL "https://get.helm.sh/helm-v${HELM_VERSION}-linux-${ARCH}.tar.gz" | tar -xvz && \
mv linux-${ARCH}/helm /usr/bin/helm && \
chmod x /usr/bin/helm && \
rm -rf linux-${ARCH}
我得到錯誤
------
> [ 5/13] RUN ARCHFLAG="$(uname -m)" && ARCH=$([ ARCHFLAG == "aarch64"] && echo "arm64" || echo $ARCHFLAG) && curl -sL "https://get.helm.sh/helm-v3.6.3-linux-${ARCH}.tar.gz" | tar -xvz && mv linux-${ARCH}/helm /usr/bin/helm && chmod x /usr/bin/helm && rm -rf linux-${ARCH}:
#8 0.248 /bin/sh: 1: [: aarch64: unexpected operator
#8 1.295
#8 1.295 gzip: stdin: not in gzip format
#8 1.296 tar: Child returned status 1
#8 1.296 tar: Error is not recoverable: exiting now
我也將它封裝為一個字串,在 IDE 中,第一個$ARCHFLAG
顯示為與其余字串相同的顏色,而第二個$ARXCHFLAG
顯示為變數。
uj5u.com熱心網友回復:
您正在使用[ $ARCHFLAG == "aarch64" ]
. 這將在 bash 或“中途 POSIX shell”中作業(例如,在 POSIX 模式下啟動并實作==
運算子的 bash),但在 POSIX shell 中,您會得到_unexpected operator_。從您發布的錯誤訊息中,我們看到您沒有執行 bash。我建議您切換到 bash,或者將測驗撰寫為[ "$ARCHFLAG" = "aarch64" ]
.
uj5u.com熱心網友回復:
我沒有 aarch64 和 arm64 但是我在 windows 上使用 bash.exe 嘗試了你的腳本
#!/bin/bash
set -x
unset -f uname
uname ()
{
echo -n aarch64
}
HELM_VERSION=3.9.2
ARCHFLAG="$(uname -m)" && ARCH=$([ "$ARCHFLAG" == "aarch64" ] && echo "arm64" || echo $ARCHFLAG) && curl -sL "https://get.helm.sh/helm-v${HELM_VERSION}-linux-${ARCH}.tar.gz" | tar -xvz && \
echo mv linux-${ARCH}/helm /usr/bin/helm && \
echo chmod x /usr/bin/helm && \
echo rm -rf linux-${ARCH}
set x
樣本輸出:
$ ./73542210.sh
-bash 13 unset -f uname
-bash 13 HELM_VERSION=3.9.2
--bash 13 uname -m
--bash 13 echo -n aarch64
-bash 13 ARCHFLAG=aarch64
--bash 13 '[' aarch64 == aarch64 ']'
--bash 13 echo arm64
-bash 13 ARCH=arm64
-bash 13 curl -sL https://get.helm.sh/helm-v3.9.2-linux-arm64.tar.gz
-bash 13 tar -xvz
linux-arm64/
linux-arm64/helm
linux-arm64/LICENSE
linux-arm64/README.md
-bash 13 echo mv linux-arm64/helm /usr/bin/helm
mv linux-arm64/helm /usr/bin/helm
-bash 13 echo chmod x /usr/bin/helm
chmod x /usr/bin/helm
-bash 13 echo rm -rf linux-arm64
rm -rf linux-arm64
-bash 13 set x
$ ls -ltr linux-arm64/helm
-rwxr-xr-x 1 murugesan openssl 45875200 Jul 21 23:11 linux-arm64/helm
$ ls -ltr linux-arm64
total 44816
-rwxr-xr-x 1 murugesan openssl 45875200 Jul 21 23:11 helm
-rw-r--r-- 1 murugesan openssl 3367 Jul 21 23:21 README.md
-rw-r--r-- 1 murugesan openssl 11373 Jul 21 23:21 LICENSE
我已經通過 echo 使用了 mv 和 rm 命令。我使用 uname 函式來測驗你的腳本。未使用 set -x 和 set x 命令獲得的輸出。更新腳本:
$ rm -rf linux-arm64
$ ./73542210.sh
linux-arm64/
linux-arm64/helm
linux-arm64/LICENSE
linux-arm64/README.md
mv linux-arm64/helm /usr/bin/helm
chmod x /usr/bin/helm
rm -rf linux-arm64
$ ./73542210.sh
ls -ltr linux-arm64
total 44816
-rwx---r-x 1 murugesan openssl 45875200 Jul 21 23:11 helm
-rw----r-- 1 murugesan openssl 3367 Jul 21 23:21 README.md
-rw----r-- 1 murugesan openssl 11373 Jul 21 23:21 LICENSE
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/503782.html
下一篇:如何用空白迭代字串?