【问题标题】:Configure alias with jq and multiple quotes使用 jq 和多个引号配置别名
【发布时间】:2021-06-20 08:56:22
【问题描述】:

我正在尝试配置一个别名,该别名将为我提供 AWS 资源列表,但它在使用单引号和双引号转义时一直失败。

aws ec2 describe-instances --filters "Name=tag:tag,Values=foo1" "Name=bar,Values=foo2,foo3" | jq '.Reservations[].Instances[].Tags[] | select(.Key=="Name") | .Value' | tr -d '"' |  sed -e 's/-pattern1.*//g' | sed -e 's/pattern2.*//g' | uniq

用单引号/双引号包裹所有内容不起作用 - alias alias1='aws ec2 describe-instances --filters "Name=tag:tag,Values=foo1" "Name=bar,Values=foo2,foo3" | jq '.Reservations[].Instances[].Tags[] | select(.Key=="Name") | .Value' | tr -d '"' | sed -e 's/-pattern1.*//g' | sed -e 's/pattern2.*//g' | uniq'

我正在尝试了解应该将转义字符放在哪里

【问题讨论】:

  • 为了缩短故事,使用函数。
  • 您也可以使用--query 选项和aws 来完全替换jq 的使用。

标签: bash alias aws-cli single-quotes


【解决方案1】:

在上述情况下使用 alias 需要转义很多引号

我最好的建议是使用函数

myFunc(){
aws ec2 describe-instances --filters "Name=tag:tag,Values=foo1" "Name=bar,Values=foo2,foo3" | jq '.Reservations[].Instances[].Tags[] | select(.Key=="Name") | .Value' | tr -d '"' |  sed -e 's/-pattern1.*//g' | sed -e 's/pattern2.*//g' | uniq
 }

你可以把它放在你的 .bashrc 中。只需输入 myFunc 即可运行命令

无需转义引用!如此简单,快乐的编码

【讨论】:

  • “使用函数”几乎总是“我在使用别名时遇到问题...”的正确答案
  • 是的,不客气@NZL。如果它解决了您的问题,您可以将其标记为已接受
猜你喜欢
  • 2012-12-16
  • 2014-12-02
  • 2014-11-16
  • 2020-06-25
  • 1970-01-01
  • 1970-01-01
  • 2017-09-03
  • 1970-01-01
相关资源
最近更新 更多