Linux   发布时间:2022-03-31  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了linux – 一个使用另一个bash命令输出的bash命令大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

概述

我在谷歌云有一组机器. 来自我的localhost: gcloud compute instance-groups list-instances workers OUTPUT: NAME ZONE STATUS workers-lya2 us-central1-a RUNNING workers-23d4 us-central1
我在谷歌云有一组机器.
来自我的localhost:

gcloud compute instance-groups list-instances workers
OUTPUT:
NAME              ZONE           STATUS
workers-lya2    us-central1-a     RUNNING 
workers-23d4     us-central1-a     RUNNING 
...
workers-3asd3     us-central1-a     RUNNING

我想从该列表中选择一个随机工作者名称(比如workers-23d4),然后从第一个命令开始区域us-central1-m并将其粘贴到此命令中:

gcloud compute --project "my-project" ssh --zone "<zone_name_from_first_command> "<machine_name_from_first_command>"

bash上的一点点弱点.请帮忙

解决方法

gcloud compute instance-groups list-instances workers | grep -v "^NAME"  | shuf -n 1 | awk '{print $1,$2}' | 
while read machine zone; do
    export SELECTED_MACHINE="$machine"
    export SELECTED_ZONE="$zone"
done
gcloud compute --project "my-project" ssh --zone "$SELECTED_ZONE" "$SELECTED_MACHINE"

> grep -v“^ NAME”剥离所有以NAME开头的行(假设它只是你要剥离的第一行)
> shuf从剩余的行中取一条随机
> awk'{print $1,$2}’在空格处分割行并打印第一列和第二列
> read读取awk的输出到变量$machine和$zone

更新:上面的代码适用于zsh,但不适用于bash,因为bash运行子sHell(zsh不)和export does only pass variables to subprocesses中的管道,而不是父进程.以下脚本通过在父进程中运行读取来解决此问题:

@H_511_22@machine_zone=$(gcloud compute instance-groups list-instances workers | grep -v "^NAME" | shuf -n 1 | awk '{print $1,$2}') read machine zone <<< $machine_zone gcloud compute --project "my-project" ssh --zone "$zone" "$machine"

大佬总结

以上是大佬教程为你收集整理的linux – 一个使用另一个bash命令输出的bash命令全部内容,希望文章能够帮你解决linux – 一个使用另一个bash命令输出的bash命令所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。