Estoy tratando de hacer que esto funcione
#!/usr/bin/expect
spawn "(psql blabla \"blabla sql;\" &> /dev/null) && (pg_restore -d xx my_file.sql &> /dev/null)"
expect "Password for user my_base: "
send "v"
Pero siempre recibo:
spawn (psql blabla "blabla sql;" &> /dev/null) && (pg_restore -d xx my_file.sql &> /dev/null)
couldn't execute "(psql blabla "blabla sql;" &> /dev/null) && (pg_restore -d xx my_file.sql &> /dev/null)": no such file or directory
¿Qué me estoy perdiendo?
Respuesta1
1) no ponga los spawn
argumentos entre comillas y 2) spawn no entiende la sintaxis del shell, necesita generar un shell explícitamente
spawn bash -c {(psql blabla "blabla sql;" &> /dev/null) && (pg_restore -d xx my_file.sql &> /dev/null)}
Esto utiliza llaves, que son el equivalente esperado/Tcl de las comillas simples del shell.
Respuesta2
Aunque esta no es realmente la respuesta a su pregunta, si está intentando hacerlo pg_restore
sin ingresar una contraseña, también puede usar el ~/.pgpass
archivo para almacenar las credenciales.
Documentación de Postgres sobre ~/.pgpass
-