jqを使用してテキストをエコーし​​、コマンドを実行します。

jqを使用してテキストをエコーし​​、コマンドを実行します。

次のようにjsonをstdoutに出力するコマンドがあります。

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"
    }
}

DBPasswodの内容を画面に表示し、次のように追加のパラメータを使用してpgsqlコマンドを実行したいと思います。これまでは、次のように文字列を連結してstdoutに送信できます。

foo inf --db | foo inf --db | jq '"パスワード: " + .Config.DBPassword + "; psql -h " + .Config.DBHost + " -U " + .Config.DBUser + " " + 。構成。DB名

stdoutにパスワードをエコーし​​てpgsqlコマンドを実行するには?

ベストアンサー1

JSON形式が正しくありません。また、このアプローチの理論的根拠をもう一度考えなければなりません。しかし、あえてこうやろうとするなら、次のように試してみることができます。

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"                
    }

(よりlibpq環境変数のためのPGPASSWORD)。

おすすめ記事