【发布时间】:2018-03-10 02:16:39
【问题描述】:
我有一长串串在一起的命令(aws cli、jq、cut、sed),这些命令对我有用,我现在正试图在 bash 脚本中运行这些命令。我遇到了单引号和双引号的问题。
如果我手动运行,它将如下:
aws \
--profile app-prod \
--region us-east-1 ec2 describe-instances \
--filter 'Name=tag:ChefRole,Values=foo_bar' \
'Name=instance-state-name,Values=running' \
| jq -r '.Reservations[].Instances[] | [.InstanceId, .Tags[].Value] | @csv' \
| cut -d ',' -f1 \
| sort > sort.out;sed 's/"//g' sort.out
在我的脚本中,我尝试传入参数 region 和 Values
我试过这个:
awsCLI(){
cmd=$(aws --profile app-prod --region ${region} ec2 describe-instances --filter 'Name=tag:ChefRole,Values='${component}'| jq -r '.Reservations[].Instances[] | [.InstanceId, .Tags[].Value] | @csv' | cut -d ',' -f1 | sort > "${_sorted}";sed 's/"//g' "${_sorted}")
}
放置变量 - cmd=$(commands here) 以前在其他脚本中对我有用,但这次不行。
我也尝试过按原样运行:
aws --profile app-prod --region ${region} ec2 describe-instances --filter 'Name=tag:ChefRole,Values='${component}'| jq -r '.Reservations[].Instances[] | [.InstanceId, .Tags[].Value] | @csv' | cut -d ',' -f1 | sort > "${_sorted}";sed 's/"//g' ${_sorted}"
其中任何一个都不适合我。请为此提供最佳实践建议。我应该打破这个吗?你将如何构建这个长命令?
谢谢。
(编者注:第一个代码块被 \ 分割并缩进;A.T.)
【问题讨论】:
标签: bash shell unix command-line-interface