我觀察到在使用該選項時會kubectl
插入一個額外\
的換行符。--from-literal
從檔案加載“相同”內容時,它按預期作業。顯然,必須有區別,因為標準輸出看起來不同,但我不明白為什么。
echo "api_key" >> .tmp
echo "api_value" >> .tmp
cat -e .tmp
kubectl delete secrets api-env
kubectl create secret generic api-env --from-file=.api=.tmp
rm .tmp
kubectl get secret api-env -o json | jq '.data | map_values(@base64d)'
#prints:
#api_key$
#api_value$
#secret "api-env" deleted
#secret/api-env created
#{
# ".api": "api_key\napi_value\n"
#}
上面的命令在每一行上創建一個換行符。證明cat -e
檔案中有兩個換行符,每個換行符都在末尾。
使用字串執行相同操作會導致\n
被轉義。
api="api_key\napi_value\n"
echo $api
kubectl delete secrets api-env
kubectl create secret generic api-env --from-literal=.api=$api
kubectl get secret api-env -o json | jq '.data | map_values(@base64d)'
#prints:
#api_key\napi_value\n
#secret "api-env" deleted
#secret/api-env created
#{
# ".api": "api_key\\napi_value\\n"
#}
該echo
命令顯示提供給變數的字串,但是在將其加載到 kubernetes 之后,該字串\n
被轉義并且內容被認為是單行。
這很重要,因為在我使用的幾種情況下,我kubectl
不允許寫入本地檔案系統。
這里發生了什么以及如何阻止 kubernetes 逃避\n
角色?
環境:
- zsh 5.8 (x86_64-apple-darwin21.0)
- 達爾文內核版本 21.4.0:root:xnu-8020.101.4~15/RELEASE_X86_64 x86_64
- kubectl 客戶端:“v1.20.10”
- kubectl 服務器:“v1.23.3”
- minikube 版本:v1.25.2
uj5u.com熱心網友回復:
當您使用 時echo $api
,echo
它本身會更改內容:在啟用了 XSI 擴展的符合 POSIX 的 shell 上(雖然 zsh 通常不符合 POSIX,但它確實實作了這個方面),\n
s 被替換為文字換行符。
這不會發生在--from-literal=.api=$api
; 在那里,您\n
的 s 仍然是兩個字符序列,首先是反斜杠,然后是n
.
鑒于您在一個支持使用$'\n'
作為直接表示換行文字的方式的外殼上,請考慮--from-literal=.api="api_key"$'\n'"api_value"
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/470200.html
標籤:贝壳 Kubernetes Unix zsh kubectl
上一篇:無法連接到AWSEKS集群