좋아, 비슷한 질문이 있지만 정확히 내가 원하는 것은 아닙니다.
저는 Kubernetes를 사용하고 있으므로 정보는 거기에서 나온 것이지만 이 질문은 쉘 스크립트에 대한 것이므로 Kubernetes 사람들을 비난하지 마십시오. :)
정보를 얻기 위해 다음 명령을 실행합니다.
kubectl get pods -o wide --all-namespaces | grep sonarqube-
결과의 예:
default sonarqube-664b4fd48-g6nvb 1/1 Running 0 4d 10.233.64.6 local-node-0
목표: 내가 원하는 것은 처음 2개의 값( default
sum sonarqube-664b4fd48-g6nvb
)을 가져와 스크립트의 다른 곳에서 사용할 수 있는 변수로 변환하는 것입니다.
변수를 사용하려는 명령의 예는 다음과 같습니다.
kubectl cp <file> ${namespace}/${deployment}:/opt/app/extensions/plugins/
감사합니다. 추가 정보가 필요하면 알려주시기 바랍니다.
답변1
그리고세게 때리다~의read
기능:
read -r namespace deployment other < <(kubectl get pods -o wide --all-namespaces | grep sonarqube-)
kubectl cp <file> "${namespace}/${deployment}:/opt/app/extensions/plugins/"
답변2
일반적으로 말하면
다른 쉘에서 작동하는 것은 bash
파이프 출력에서 위치 인수를 설정하는 것입니다.
set -f -- $(kubectl get pods -o wide --all-namespaces | grep sonarqube- )
이 경우 이제 등과 같은 변수에 액세스할 수 있습니다 $1
.$2
특히 bash용
bash
배열 변수는 다음과 같이 생성 할 수 있습니다 .
var=( $(kubectl get pods -o wide --all-namespaces | grep sonarqube- ) )
관용구는 입니다 var=( ... )
. 이 경우 파이프의 출력입니다 grep
.
${var[n]}
그런 다음 0부터 시작하는 형식을 사용하여 배열 요소에 액세스할 수 있습니다 n
.
답변3
이 경우(예측 가능한 출력 열 포함) 일반적으로 awk를 사용합니다. 다음과 같은 것이 유용할 수 있습니다.
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); }'