对于每个名称和命名空间
For each name and namespace
我正在尝试 运行 一些批量命令。在下面的情况下我想删除
所有 pods 没有状态 运行ning.
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 "
输出为
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
处理两个参数:
xargs -n 1 echo cmd
指定</code>和<code>
对xargs
不起作用,这两个参数将自动发送到命令。事实上,它们是输出中 cmd
之后的空格的原因:它们在 xargs
看到它们之前被 shell 解释,并且它们扩展为空字符串。
一定要捕获每行 (-L1
) 然后让 shell 负责 $
解析,即下面应该适合你
xargs -L1 sh -c 'echo cmd ' --
我正在尝试 运行 一些批量命令。在下面的情况下我想删除 所有 pods 没有状态 运行ning.
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 "
输出为
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
处理两个参数:
xargs -n 1 echo cmd
指定</code>和<code>
对xargs
不起作用,这两个参数将自动发送到命令。事实上,它们是输出中 cmd
之后的空格的原因:它们在 xargs
看到它们之前被 shell 解释,并且它们扩展为空字符串。
一定要捕获每行 (-L1
) 然后让 shell 负责 $
解析,即下面应该适合你
xargs -L1 sh -c 'echo cmd ' --