繁体   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