Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

557
Vistas
la variable bash parece fallar en la asignación a la salida de psql ejecutada en el contenedor

Tengo Postgres ejecutándose en un contenedor docker en un host remoto. Estoy intentando conectarme a ese host remoto y usar un heredoc para pasar un script a ese shell. En ese script, intento ejecutar una consulta psql contra la base de datos de postgres que reside en el contenedor en ese host y asigno el resultado a una variable. Lo siento, sé que es un poco complicado, pero tal vez algún código sea más coherente (o no)

Si ejecuto esto, no obtengo nada de mi "eco" de $dbVersion... de hecho, debido a alguna otra experimentación, estoy bastante convencido de que nunca llega a la línea de "eco", pero para la vida de mí no sé por qué, porque...

 ssh root@$serverIP13 <<EOF postgresId=\$(docker ps | grep 'postgres_db' | awk '{print \$1}') dbVersion=\$(docker exec -i \$postgresId psql -X -A -d myDb -U myUser -t -c "SELECT Max(Version) FROM DbVersion;") echo \$dbVersion EOF

...después de darle vueltas y vueltas a mi código de una forma u otra... finalmente encontré una forma que funciona, y obtengo un "eco" exitoso de mi número de versión. Soy bastante nuevo en bash, así que espero que alguien pueda discernir este misterio por mí y ayudarme a comprender un poco mejor cómo funciona bash en este sentido, y por qué lo siguiente tiene éxito y lo anterior falla.

 ssh root@$serverIP13 <<EOF postgresId=\$(docker ps | grep 'postgres_db' | awk '{print \$1}') dbVersion=\$(echo "psql -X -A -d myDb -U myUser -t -c 'SELECT Max(Version) FROM DbVersion;'" | docker exec -i \$postgresId bash) echo \$dbVersion EOF
over 4 years ago · Santiago Trujillo
2 Respuestas
Responde la pregunta

0

La forma normal de obtener una salida de docker exec -i es llamar a docker para que ejecute un shell (que, a su vez, ejecuta su comando.
Consulte " Bash / Docker exec: redirección de archivos desde dentro de un contenedor " (mencioné en 2015)

 dbVersion=\$(docker exec -i sh -c '\$postgresId psql -X -A -d myDb -U myUser -t -c "SELECT Max(Version) FROM DbVersion;"')
over 4 years ago · Santiago Trujillo Denunciar

0

El siguiente script funcionó sin invocar bash:

 ssh root@$serverIP13 << 'EOF' postgresId=$(docker ps | grep 'postgres_db' | awk '{print $1}') dbVersion=$(docker exec $postgresId psql -X -A -d postgres -U postgres -c "select current_database()") echo $dbVersion EOF

Uso 'EOF' para evitar tener que escapar.

Para pasar valores locales a remotos:

 ssh root@$serverIP13 /bin/bash -s 1 2 3 << 'EOF' echo $1 $2 $3 EOF

No debe usar -i si coloca docker exec en $(...)

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda