簡體   English   中英

如何在 bash 中的多個 pipe 中使用 xargs 捕獲 args

[英]How can capture args with xargs across multiple pipe in bash

我有這個命令

kubectl get ns -l app=sample-api | awk '/fast/{print $1}' |
xargs -I {} helm list --short -n {} | xargs -I {} helm delete -n ?? {}

假設第一個 xargs 的參數是 $1 並且它被替換為類似helm list --short -n {$1}

$2 是第二個 Xargs 的參數,它被替換為

helm delete -n ?? {$2}

但我也希望在最后一個命令中像這樣使用 $1

helm delete -n {$1} {$2}

這可能嗎?

第一個 xargs 的 output

name1
name2
name3

第二個 xargs

chart1
chart2
chart3

我會簡單地將它分解成一個單獨的循環。

kubectl get ns -l app=sample-api |
awk '/fast/{print $1}' |
while read -r name; do
    target=$(helm list --short -n "$name")
    helm delete -n "$name" "$target"
done

如評論中所述,如果您在 Makefile 中需要此功能,則需要使用制表符縮進每一行,將所有美元符號加倍,在語句之間添加分號,並反斜杠轉義內部換行符:

.PHONY: kill_em_all
kill_em_all:
    kubectl get ns -l app=sample-api |\
    awk '/fast/{print $$1}' |\
    while read -r name; do\
        target=$$(helm list --short -n "$$name");\
        helm delete -n "$$name" "$$target";\
    done

不幸的是,堆棧溢出仍將制表符呈現為空格,因此您將無法直接將其復制/粘貼到Makefile中。

暫無
暫無

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

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