Для каждого имени и пространства имен - PullRequest
0 голосов
/ 25 февраля 2019

Я пытаюсь запустить несколько групповых команд.В приведенном ниже случае я хочу удалить все модули, для которых не запущено состояние.

Прописанный ввод в 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"

Вывод

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

Очевидно, я хочу одну команду с обоими входными значениями.Любые предложения о том, как это сделать?Возможно с более простой командой?

Ответы [ 2 ]

0 голосов
/ 25 февраля 2019

Убедитесь, что захватывает каждую строку (-L1), а затем пусть оболочка позаботится о разборе $, т. Е. Ниже должно работать для вас

xargs -L1 sh -c 'echo cmd $1 $2' --
0 голосов
/ 25 февраля 2019

Вы можете обработать два аргумента с помощью -n 2:

xargs -n 1 echo cmd

Задание $1 и $2 не работает с xargs, два параметра будут отправлены команде автоматически.Фактически, они являются причиной пробелов после cmd в вашем выводе: они интерпретируются оболочкой до того, как xargs их видит, и расширяются до пустых строк.

...