`psql --file`이 물결표를 잘못 해석하는 이유는 무엇입니까?


2

이전에는 pg_dump를 사용하여 book_dump.sql이라는 홈 디렉토리에 데이터베이스 백업을 만들었습니다.

백업이라는 빈 데이터베이스에 백업을 복원하고 싶습니다.

백업을 복원하기 위해 다음 명령을 시도했습니다.

psql book --file=~/book_dump.sql

이 메시지와 함께 실패했습니다 :

~/book_dump.sql: No such file or directory

나는 절대 경로로 다시 시도했다.

psql book --file=/home/user/book_dump.sql

이번에는 효과가있었습니다.

--fileequals 대신 공백을 사용해 보았습니다 .

psql book --file ~/book_dump.sql

이것은 잘 작동합니다.

등호를 사용할 때 물결표가 작동하지 않는 이유는 무엇입니까?

이 문제는 psql에 특정한 문제입니까, 아니면 Linux 문제입니까?

예상대로 작동하도록 무언가를 변경할 수 있습니까?

답변:


1

~캐릭터 확장을 담당하는 것은 쉘 (psql 아님)입니다 .

bash를 가정하면 http://www.gnu.org/software/bash/manual/html_node/Tilde-Expansion.html을 참조 하십시오 .

단어가 인용 부호없는 물결표 문자 ( '~')로 시작하면 인용되지 않은 첫 번째 슬래시 (또는 인용되지 않은 슬래시가없는 모든 문자)까지의 모든 문자는 물결표 접두어로 간주됩니다.

등호 앞에 틸드가 표시되는 것은 특별한 경우입니다. 그들은 말합니다 :

각 변수 할당은 ':'또는 첫 번째 '='바로 뒤에 인용되지 않은 물결표 접두어가 있는지 확인합니다. 이 경우 물결표 확장도 수행됩니다. 결과적으로 PATH, MAILPATH 및 CDPATH에 할당 할 때 물결표가있는 파일 이름을 사용할 수 있으며 쉘은 확장 된 값을 할당합니다.

--file=~/foo변수 할당이 아니므로 물결표 확장이 적용되지 않습니다. --file=$HOME/foo대신 사용해야한다고 생각 합니다.

반면에 file=~/foo명령이에 할당 /home/user/foo됩니다 $file.

또한 할당이 아니더라도 echo bar=~/foo출력 bar=/home/daniel/foo되는 것을 알 수 있습니다. 일부 규칙은 위의 규칙에 약간의 퍼지 요인이 있습니다.


psql이 공백 대신 공백을 허용한다는 것을 알았으므로 항상 공백을 사용합니다. 그렇게 간단합니다. 잘 연구 된 답변에 감사드립니다!
Iain Samuel McLean Elder
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.