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).

관련 정보