Pegue a saída do Grep e selecione partes para Variáveis

1

Ok, existem perguntas semelhantes, mas não exatamente o que estou procurando.

Eu estou trabalhando com o Kubernetes, então as informações são disso, mas essa pergunta é para o Shell Scripting, então, por favor, não me obrigue a usar as pessoas do Kubernetes. :)

Eu corro o seguinte comando para obter as informações:

kubectl get pods -o wide --all-namespaces | grep sonarqube-

Exemplo de resultado:

default       sonarqube-664b4fd48-g6nvb                   1/1       Running   0          4d        10.233.64.6     local-node-0

Objetivo: O que eu quero é pegar os 2 primeiros valores ( default e sonarqube-664b4fd48-g6nvb ) e transformá-los em variáveis que eu possa usar em outras partes do script.

Exemplo de Comando Eu quero usar as variáveis em é como:

kubectl cp <file> ${namespace}/${deployment}:/opt/app/extensions/plugins/

Obrigado e, por favor, deixe-me saber se mais informações são necessárias.

    
por Dennis Christilaw 06.03.2018 / 22:35

3 respostas

1

geralmente

O que funcionará em bash e em outras shells é definir parâmetros posicionais a partir da saída do pipe:

set -f -- $(kubectl get pods -o wide --all-namespaces | grep sonarqube- )

Neste caso, você pode acessar as variáveis como $1 , $2 , etc.

specific for bash

Em bash , é possível criar uma variável de matriz, da seguinte forma:

var=( $(kubectl get pods -o wide --all-namespaces | grep sonarqube- ) )

O idioma é var=( ... ) , neste caso, a saída do seu grep pipe.

Você pode acessar elementos de sua matriz usando o formulário ${var[n]} , com n começando em zero.

    
por 06.03.2018 / 22:41
3

Com a função bash read :

read -r namespace deployment other < <(kubectl get pods -o wide --all-namespaces | grep sonarqube-)
kubectl cp <file> "${namespace}/${deployment}:/opt/app/extensions/plugins/"
    
por 06.03.2018 / 22:43
0

Em casos como esse (com colunas de saída previsíveis), geralmente alcanço o awk. Algo como isso pode ser útil:

kubectl get pods -o wide --all-namespaces | awk '/sonarqube-/ { cmd=sprintf("kubectl cp <file> %s/%s:/opt/app/extensions/plugins", $1, $2); print(cmd); system(cmd); }' 
    
por 06.03.2018 / 22:54