【问题标题】:How to capture an output text value in variable in bash如何在bash中的变量中捕获输出文本值
【发布时间】:2019-10-15 21:36:01
【问题描述】:

我正在运行此命令来获取 EC2 的公共 IP。它按预期工作!

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

我正在尝试使用这个值来运行这个命令,所以它必须是我从 ec2 describe-instances 获得的值,而不是 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"'

所以我有这样的命令

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}"'

所以不确定,如果你能帮助我,我应该如何使用该输出

【问题讨论】:

  • 使用:IP=$(aws ec2 describe-instances --filters "Name=tag:Name,Values=$NAME_PREFIX*" --query 'Reservations[*].Instances[*].PublicIpAddress' --output text)

标签: bash amazon-web-services amazon-ec2 ansible


【解决方案1】:

最好在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

现在要将输出 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)

然后使用它:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-08-16
    • 1970-01-01
    • 2016-09-04
    • 2010-10-11
    • 2022-11-16
    • 2014-10-08
    • 1970-01-01
    相关资源
    最近更新 更多