Ecoando texto e executando um comando com jq

1

Eu tenho um comando que expulsa json para stdout assim:

foo inf --db

{
    "Name": "A rose by any any other",
    "Config": {
        "DBHost": "abc.efg.us-east-1.rds.amazonaws.com",
        "DBName": "bsghshsgh",
        "DBUser": "bshshs",
        "DBPassword": "secret"
    }
}

Gostaria de fazer eco ao conteúdo do DBPasswod na tela e, em seguida, executar um comando pgsql com os outros parâmetros como esse. Até agora eu posso concatenar uma string para enviar para stdout assim:

foo inf --db | jq '"password: " + .Config.DBPassword + "; psql -h " + .Config.DBHost + " -U " + .Config.DBUser + " " + .Config.DBName'

Como faço para apenas ecoar a senha para stdout e executar o comando pgsql?

    
por Justin Dearing 16.11.2016 / 00:12

1 resposta

2

Seu JSON está malformado. Além disso, você provavelmente deveria reconsiderar a sanidade dessa abordagem. Mas se você insistir em fazer assim, você pode tentar algo assim:

foo inf --db | \
    jq -r '.Config | .DBPassword, .DBHost, .DBUser, .DBName' | \
    {
        read -r PGPASSWORD
        read -r host
        read -r user
        read -r db

        psql -h "$host" -U "$user" "$db"                
    }

(cf. libpq-envars para PGPASSWORD ).

    
por 16.11.2016 / 00:52

Tags