简体   繁体   English

如何在 bash 的变量中捕获 output 文本值

[英]How to capture an output text value in variable in bash

I'm running this command for getting the public IP of an EC2.我正在运行此命令来获取 EC2 的公共 IP。 It works as expected!它按预期工作!

aws ec2 describe-instances --filters "Name=tag:Name,Values=EC2" --query 'Reservations[*].Instances[*].PublicIpAddress' --output text

I'm trying to use this value for running this command, so instead of XX.XX.XX.XX it has to be the value I get from ec2 describe-instances ansible-playbook provisioning/site.yml -i inventory --ssh-common-args '-o "proxycommand ssh -W %h:%p -i Key.pem ubuntu@XX.XX.XX.XX"'我正在尝试使用此值来运行此命令,因此它必须是我从 ec2 describe-instances ansible-playbook provisioning/site.yml -i inventory --ssh-common-args '-o "proxycommand ssh -W %h:%p -i Key.pem ubuntu@XX.XX.XX.XX"'获得的值,而不是 XX.XX.XX.XX ansible-playbook provisioning/site.yml -i inventory --ssh-common-args '-o "proxycommand ssh -W %h:%p -i Key.pem ubuntu@XX.XX.XX.XX"'

So I have my commands like this所以我有这样的命令

IP=aws ec2 describe-instances --filters "Name=tag:Name,Values=$NAME_PREFIX*" --query 'Reservations[*].Instances[*].PublicIpAddress' --output text
export BASTION="ubuntu@${IP}"
ansible-playbook provisioning/site.yml -i inventory --ssh-common-args '-o "proxycommand ssh -W %h:%p -i Key.pem ${BASTION}"'

So not sure, how should I use that output, if you could help me please所以不确定,我应该如何使用output,如果你能帮助我请

It is better to add "Name=instance-state-name,Values=running" clause in filters to make sure you get a running instance only so your aws command would be:最好在filters中添加"Name=instance-state-name,Values=running"子句,以确保您只获得一个正在运行的实例,因此您的aws命令将是:

aws ec2 describe-instances --filters "Name=instance-state-name,Values=running" "Name=tag:Name,Values=$NAME_PREFIX*" --query 'Reservations[*].Instances[*].PublicIpAddress' --output text

Now to store output IP in a variable, you can use command substitution:现在要将 output IP 存储在变量中,可以使用命令替换:

ip=$(aws ec2 describe-instances --filters "Name=instance-state-name,Values=running" "Name=tag:Name,Values=$NAME_PREFIX*" --query 'Reservations[*].Instances[*].PublicIpAddress' --output text)

Then to use it:然后使用它:

export BASTION="ubuntu@$ip"
ansible-playbook provisioning/site.yml -i inventory --ssh-common-args '-o "proxycommand ssh -W %h:%p -i Key.pem '"$BASTION"'"'

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM