Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
jq键,每个shell脚本的值_Shell_Amazon Web Services_Foreach_Jq - Fatal编程技术网

jq键,每个shell脚本的值

jq键,每个shell脚本的值,shell,amazon-web-services,foreach,jq,Shell,Amazon Web Services,Foreach,Jq,我尝试使用输出的每个键和值,并将其传递到另一个命令。 以下是我试图使用的: INSTANCE_ID=$(curl http://169.254.169.254/latest/meta-data/instance-id) aws ec2 describe-tags --filters "Name=resource-id,Values=$INSTANCE_ID" 使用上述命令,我有以下输出: { "Tags": [ { "ResourceType": "instance",

我尝试使用输出的每个键和值,并将其传递到另一个命令。 以下是我试图使用的:

INSTANCE_ID=$(curl http://169.254.169.254/latest/meta-data/instance-id)
aws ec2 describe-tags --filters "Name=resource-id,Values=$INSTANCE_ID"
使用上述命令,我有以下输出:

{
"Tags": [
    {
        "ResourceType": "instance",
        "ResourceId": "i-0342a609edf80001a",
        "Value": "A-VALUE",
        "Key": "A-KEY"
    },
    {
        "ResourceType": "instance",
        "ResourceId": "i-0342a609edf80001a",
        "Value": "B-VALUE",
        "Key": "B-KEY"
    },
    {
        "ResourceType": "instance",
        "ResourceId": "i-0342a609edf80001a",
        "Value": "C-VALUE",
        "Key": "C-KEY"
    },
    {
        "ResourceType": "instance",
        "ResourceId": "i-0342a609edf80001a",
        "Value": "D-VALUE",
        "Key": "D-KEY"
    },
    {
        "ResourceType": "instance",
        "ResourceId": "i-0342a609edf80001a",
        "Value": "E-VALUE",
        "Key": "E-KEY"
    },
    {
        "ResourceType": "instance",
        "ResourceId": "i-0342a609edf80001a",
        "Value": "F-VALUE",
        "Key": "G-KEY"
    },
    {
现在,我想将每个键、值通过管道传输到以下命令:

aws ec2 create-tags --resources XXXXX --tags Key=H-KEY,Value=H-VALUE
其中键、值的数量和值是可变的。所以我相信我需要一个“每个人”

你能帮我吗

就像:对于每个键,值,执行:

aws ec2 create-tags --resources XXXXX --tags Key=A-KEY,Value=A-VALUE
aws ec2 create-tags --resources XXXXX --tags Key=B-KEY,Value=B-VALUE
aws ec2 create-tags --resources XXXXX --tags Key=C-KEY,Value=C-VALUE
aws ec2 create-tags --resources XXXXX --tags Key=N...-KEY,Value=N...-VALUE
具有为外壳正确引用的输出值:

aws ec2 describe-tags --filters "Name=resource-id,Values=$INSTANCE_ID" \
| jq -r '.Tags[] | @sh "aws ec2 create-tags --resources XXXXX --tags Key=\(.Key),Value=\(.Value)"' 
根据您的输入,这将输出

aws ec2 create-tags --resources XXXXX --tags Key='A-KEY',Value='A-VALUE'
aws ec2 create-tags --resources XXXXX --tags Key='B-KEY',Value='B-VALUE'
aws ec2 create-tags --resources XXXXX --tags Key='C-KEY',Value='C-VALUE'
aws ec2 create-tags --resources XXXXX --tags Key='D-KEY',Value='D-VALUE'
aws ec2 create-tags --resources XXXXX --tags Key='E-KEY',Value='E-VALUE'
aws ec2 create-tags --resources XXXXX --tags Key='G-KEY',Value='F-VALUE'
要执行这些命令,请将命令导入
sh

aws ec2 describe-tags ... | jq -r ... | sh 

jq是一次相当冒险的经历。您需要添加“选择”过滤器以删除以“aws:”开头的密钥

具有为外壳正确引用的输出值:

aws ec2 describe-tags --filters "Name=resource-id,Values=$INSTANCE_ID" \
| jq -r '.Tags[] | @sh "aws ec2 create-tags --resources XXXXX --tags Key=\(.Key),Value=\(.Value)"' 
根据您的输入,这将输出

aws ec2 create-tags --resources XXXXX --tags Key='A-KEY',Value='A-VALUE'
aws ec2 create-tags --resources XXXXX --tags Key='B-KEY',Value='B-VALUE'
aws ec2 create-tags --resources XXXXX --tags Key='C-KEY',Value='C-VALUE'
aws ec2 create-tags --resources XXXXX --tags Key='D-KEY',Value='D-VALUE'
aws ec2 create-tags --resources XXXXX --tags Key='E-KEY',Value='E-VALUE'
aws ec2 create-tags --resources XXXXX --tags Key='G-KEY',Value='F-VALUE'
要执行这些命令,请将命令导入
sh

aws ec2 describe-tags ... | jq -r ... | sh 

jq是一次相当冒险的经历。您需要添加“选择”过滤器以删除以“aws:”开头的密钥


有了它,我得到了键,值:aws ec2描述标记--过滤器“名称=资源id,值=$INSTANCE_id”--区域$region | jq-r.tags[]|“(.Key)(.Value)”,现在我需要循环,对吗?有了它,我得到了键,值:aws ec2描述标记--过滤器“名称=资源id,值=$INSTANCE_id”--区域$region | jq-r.tags[]|“(.Key)(.Value)”“现在我需要循环,对吗?成功了!谢谢!但是,我需要最后一个细节:是否可以忽略以“Key”开头的键:“aws:**”?它成功了!谢谢!但是,我需要最后一个细节:是否可以忽略以“Key”开头的键:“aws:**”?