さて、似たような質問がありますが、まさに私が望むものではありません。
私は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]}
その後、ゼロから始まる形式を使用して配列要素にアクセスできます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); }'