locate
다음과 같이 여러 데이터베이스 파일을 명령 에 전달하고 싶습니다 .
locate -d ~/.a_locate.db:~/.b_locate.db: -Ai file_to_find
하지만 나에게 다음과 같은 오류가 발생합니다.
locate: can not stat () `~/.b_locate.db': No such file or directory
위치 지정 매뉴얼 페이지에는 다음과 같이 나와 있습니다.
-d, --database DBPATH 기본 데이터베이스를 DBPATH로 바꿉니다.
DBPATH는 :-구분된 데이터베이스 파일 이름 목록입니다. 여러 --database 옵션이 지정된 경우 결과 경로는 개별 경로를 연결한 것입니다.
"별도의 연결"이 무엇을 의미하는지 잘 모르겠습니다. 제가 뭘 잘못하고 있는 걸까요? 전체 경로( /home/user/.b_locate.db
)를 제공하려고 시도했는데 작동했습니다. 누군가 이 동작을 설명할 수 있나요?
(저는 mlocate
Arch Linux에서 패키지를 사용하고 있습니다)
답변1
두 번째는 ~
확장되지 않았습니다.
locate -d "${HOME}/.a_locate.db:${HOME}/.b_locate.db:" -Ai file_to_find
대신, 또는 이것이 zsh이므로,
locate -d $HOME/.a_locate.db:$HOME/.b_locate.db: -Ai file_to_find
그 이유는 ~/
쉘 단어의 시작 부분에서만 확장되기 때문입니다. 쉘 단어는 공백으로만 끝납니다(이 경우 실제 규칙은 훨씬 더 복잡합니다). ~/foo:~/bar
는 로 시작하는 단어이므로 ~/
선두는 ~
홈 디렉토리로 확장되지만 ~
중간에는 특별한 것이 없으므로 여전히 물결표입니다. 할당의 오른쪽에는 한 가지 예외가 있습니다. in 은 PATH=~/foo:~/bar
할당 기호 뒤와 오른쪽의 a 뒤에 확장됩니다 ~/
.=
: