在脚本中运行bash命令

时间:2015-10-12 15:14:41

标签: bash shell amazon-web-services

我必须在bash的脚本中运行以下命令并将其输出存储在变量中。 db_name是我想要替换的另一个变量。请注意name-dbtrue,我不希望我的shell开始运行它们。

  

aws rds describe-db-snapshots --db-instance-identifier ${db_name} --query 'DBSnapshots[?contains(DBSnapshotIdentifier, `name-db`) == `true`]'.DBSnapshotIdentifier --output text | sort -k8 | tail -n1 | gawk '{print $4}'

我首先将整个命令存储在一个字符串中,然后直接使用eval或字符串运行字符串,但每次都失败。我想它会不断扩展truename-db位。有什么帮助吗?

1 个答案:

答案 0 :(得分:2)

不是将命令存储在字符串中,而是最好将其存储在shell函数中:

function get_latest_foo () {
    local db_name="$1"
    aws rds describe-db-snapshots \
      --db-instance-identifier "$db_name" \
      --query 'DBSnapshots[?contains(DBSnapshotIdentifier, `name-db`) == `true`].DBSnapshotIdentifier' \
      --output text \
    | sort -k8 \
    | tail -n1 \
    | gawk '{print $4}'
}

latest_foo="$(get_latest_foo "$db_name")"

(注意:我在函数名中使用了foo因为我无法分辨哪个字段$4。您想要将名称更改为更有意义的名称。 )