![예상 및 복잡한 명령줄을 사용한 쉘 스크립팅: 해당 파일이나 디렉터리가 없습니다.](https://rvso.com/image/747343/%EC%98%88%EC%83%81%20%EB%B0%8F%20%EB%B3%B5%EC%9E%A1%ED%95%9C%20%EB%AA%85%EB%A0%B9%EC%A4%84%EC%9D%84%20%EC%82%AC%EC%9A%A9%ED%95%9C%20%EC%89%98%20%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8C%85%3A%20%ED%95%B4%EB%8B%B9%20%ED%8C%8C%EC%9D%BC%EC%9D%B4%EB%82%98%20%EB%94%94%EB%A0%89%ED%84%B0%EB%A6%AC%EA%B0%80%20%EC%97%86%EC%8A%B5%EB%8B%88%EB%8B%A4..png)
나는 이 일을 하려고 노력 중이야
#!/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"
하지만 나는 항상 다음과 같은 결과를 얻습니다.
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
내가 무엇을 놓치고 있나요?
답변1
1) 인수를 따옴표로 묶지 마십시오 spawn
. 2) generate가 셸 구문을 이해하지 못하므로 명시적으로 셸을 생성해야 합니다.
spawn bash -c {(psql blabla "blabla sql;" &> /dev/null) && (pg_restore -d xx my_file.sql &> /dev/null)}
이것은 쉘의 작은 따옴표에 해당하는 Expect/Tcl인 중괄호를 사용합니다.
답변2
pg_restore
이것은 실제로 귀하의 질문에 대한 답변은 아니지만 비밀번호를 입력하지 않고 수행하려는 경우 ~/.pgpass
파일을 사용하여 자격 증명을 저장할 수도 있습니다.
Postgres 문서 ~/.pgpass
-