Bash 对于每个名称和命名空间

Bash 对于每个名称和命名空间,bash,kubernetes,xargs,Bash,Kubernetes,Xargs,我正在尝试运行一些批量命令。在下面的情况下,我想删除 所有未运行状态的播客 xargs的管道输入如下所示 ingress-nginx nginx-ingress-controller-b84c455b-5k48p ingress-nginx nginx-ingress-controller-b84c455b-5kwsc ingress-nginx nginx-ingress-controller-b84c455b-88tnp ingress-nginx nginx-ingress-control

我正在尝试运行一些批量命令。在下面的情况下,我想删除 所有未运行状态的播客

xargs的管道输入如下所示

ingress-nginx nginx-ingress-controller-b84c455b-5k48p
ingress-nginx nginx-ingress-controller-b84c455b-5kwsc
ingress-nginx nginx-ingress-controller-b84c455b-88tnp
ingress-nginx nginx-ingress-controller-b84c455b-q96rj
ingress-nginx nginx-ingress-controller-b84c455b-tb98v
ingress-nginx nginx-ingress-controller-b84c455b-v9xmw
kafka kafka-0
kafka zookeeper-2
kube-system kubernetes-dashboard-5946dfdf8d-hz7gk
kube-system kubernetes-dashboard-5946dfdf8d-sv5lb
logging es-data-1
...
$ kubectl get pods --all-namespaces | \
                    grep -v Running | \
                          tr -s ' ' | \
                   cut -d" " -f 1,2 | \
                         tail -n +2 | \
         xargs -n 1 echo "cmd $1 $2"
我想在同一个命令中删除这两个值。我的尝试如下所示

ingress-nginx nginx-ingress-controller-b84c455b-5k48p
ingress-nginx nginx-ingress-controller-b84c455b-5kwsc
ingress-nginx nginx-ingress-controller-b84c455b-88tnp
ingress-nginx nginx-ingress-controller-b84c455b-q96rj
ingress-nginx nginx-ingress-controller-b84c455b-tb98v
ingress-nginx nginx-ingress-controller-b84c455b-v9xmw
kafka kafka-0
kafka zookeeper-2
kube-system kubernetes-dashboard-5946dfdf8d-hz7gk
kube-system kubernetes-dashboard-5946dfdf8d-sv5lb
logging es-data-1
...
$ kubectl get pods --all-namespaces | \
                    grep -v Running | \
                          tr -s ' ' | \
                   cut -d" " -f 1,2 | \
                         tail -n +2 | \
         xargs -n 1 echo "cmd $1 $2"
输出是

cmd   ingress-nginx
cmd   nginx-ingress-controller-b84c455b-5k48p
cmd   ingress-nginx
cmd   nginx-ingress-controller-b84c455b-5kwsc
cmd   ingress-nginx
cmd   nginx-ingress-controller-b84c455b-88tnp
cmd   ingress-nginx
cmd   nginx-ingress-controller-b84c455b-q96rj
cmd   ingress-nginx
cmd   nginx-ingress-controller-b84c455b-tb98v
cmd   ingress-nginx
cmd   nginx-ingress-controller-b84c455b-v9xmw
cmd   kafka
cmd   kafka-0
cmd   kafka
cmd   zookeeper-2
cmd   kube-system
cmd   kubernetes-dashboard-5946dfdf8d-hz7gk
cmd   kube-system
cmd   kubernetes-dashboard-5946dfdf8d-sv5lb
cmd   logging
cmd   es-data-1

显然,我想要一个同时包含两个输入值的命令。关于如何做到这一点有什么建议吗?可以使用更简单的命令吗?

可以使用-n 2处理两个参数:


指定$1和$2不适用于xargs,这两个参数将自动发送到命令。事实上,它们是输出中cmd后出现空格的原因:它们在xargs看到之前被shell解释,并扩展为空字符串。

确保每行捕获-L1,然后让shell处理$parsing,即下面的内容应该适合您

xargs -L1 sh -c 'echo cmd $1 $2' --

只需使用xargs-n2一次处理两个arg。顺便说一句:这也会杀死“挂起”状态吊舱,所以要小心。