使用 jq 回显文本并执行命令

使用 jq 回显文本并执行命令

我有一个命令将 json 输出到标准输出,如下所示:

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 命令,如下所示。到目前为止,我可以连接一个字符串发送到标准输出,如下所示:

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

如何将密码回显到 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)。

相关内容