다음과 같이 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
).