![secuencias de comandos de shell con expect y una línea de comando compleja: no existe tal archivo o directorio](https://rvso.com/image/747343/secuencias%20de%20comandos%20de%20shell%20con%20expect%20y%20una%20l%C3%ADnea%20de%20comando%20compleja%3A%20no%20existe%20tal%20archivo%20o%20directorio.png)
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
-