Zsh
如何使用環境變數在 zsh 中儲存標誌?
我正在使用kubectl和 zsh,我想將命名空間標誌儲存在環境變數中。
而不是寫:
kubectl get pods -n mynamespace
我想做類似的事情:
n='-n mynamespace' kubectl get pods $n
但這樣做,我得到:
No resources found in mynamespace namespace.
in
注意單詞和之間的兩個空格mynamespace
。如果我執行
kubectl get pods -n mynamespace
,我會獲得正確的輸出:NAME READY STATUS RESTARTS AGE nginx 1/1 Running 0 16m
這裡會發生什麼?為什麼輸出中的單詞
in
和之間有兩個空格mynamespace
?以及如何將命名空間標誌儲存在環境變數中?
zsh 不對變數執行分詞,而是將其值作為單個參數傳遞。我這裡沒有 kubectl,但你可以用任何東西重現該行為,例如 mkdir:
var='-p a/b/c/d' comp% mkdir $var mkdir: invalid option -- ' ' Try 'mkdir --help' for more information.
您可以使用以下方法呼叫相同的錯誤:
comp% mkdir '-p a/b/' mkdir: invalid option -- ' ' Try 'mkdir --help' for more information.
您可以使用以下命令查看 zsh 真正在做什麼
strace -f mkdir $var
:execve("/usr/bin/mkdir", ["mkdir", "-p a/b/c/d"], 0x7ffce5e6afb0 /* 61 vars */) = 0
正如this answer on SO中所建議的, 您需要啟用分詞,例如:
comp% mkdir -p ${=var}
在您的情況下,它將是:
kubectl get pods ${=n}