簡體   English   中英

alpine 中的雙 ambersand 運算符未按預期工作

[英]Double ambersand operator in alpine not working as expected

以下腳本

#!/bin/sh -e


wget -q -O /etc/apk/keys/sgerrand.rsa.pub https://alpine-pkgs.sgerrand.com/sgerrand.rsa.pub
wget https://github.com/sgerrand/alpine-pkg-glibc/releases/download/2.32-r0/glibc-2.32-r0.apk
apk add glibc-2.32-r0.apk && rm glibc-2.32-r0.apk
sleep 1

alpine:3.16圖像上運行成功,而apk add glibc-2.32-r0.apk命令肯定有錯誤。

/ # ./script.sh 
Connecting to github.com (140.82.121.3:443)
Connecting to objects.githubusercontent.com (185.199.108.133:443)
saving to 'glibc-2.32-r0.apk'
glibc-2.32-r0.apk    100% |**************************************************************************************************************************************************************************************************| 4331k  0:00:00 ETA
'glibc-2.32-r0.apk' saved
(1/1) Installing glibc (2.32-r0)
ERROR: glibc-2.32-r0: trying to overwrite etc/nsswitch.conf owned by alpine-baselayout-data-3.2.0-r23.
1 error; 44 MiB in 20 packages
/ # echo $?
0

為什么&&運算符不在下一行中

apk add glibc-2.32-r0.apk && rm glibc-2.32-r0.apk

按預期工作?

因為 shell 無法區分因失敗而返回的 1 和成功返回的 1 指示 false ,任何情況下您在命令上分支都會在該命令的持續時間內禁用set -e行為。

因此,因為&& rm glibc-2.32-r0.apk發生在apk命令是否成功,所以 apk 命令被“檢查”,所以set -e不適用於它; 執行最后一行的sleep ,並為整個腳本返回退出狀態(0)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM