CDPATH=".:/some/path"를 사용할 때 하위 디렉터리의 전체 경로가 인쇄되는 것을 방지하는 방법은 무엇입니까?

CDPATH=".:/some/path"를 사용할 때 하위 디렉터리의 전체 경로가 인쇄되는 것을 방지하는 방법은 무엇입니까?

CDPATHbash를 사용하여 내가 자주 방문하는 디렉토리에 디렉토리를 심볼릭 링크 하고 싶습니다 . 그러나 다음을 수행하십시오.

CDPATH="~/symlinks"

둘 다 있으면 cd SUBDIR작업이 중지됩니다. 해당 디렉터리가 현재 작업 디렉터리보다 우선합니다../SUBDIR~/symlinks/SUBDIRCDPATH

나는 다음을 사용하여 이 문제를 해결하려고 했습니다.

CDPATH=".:~/symlinks"

이렇게 하면 우선순위 문제가 해결되지만 이제 cd하위 디렉터리로 이동하면 항상 전체 경로가 인쇄됩니다.

$ pwd
/foo/bar
$ cd baz
/foo/bar/baz

이것은 약간 짜증나는 일입니다. 나도 할 수 있다는 걸 알아다음을 수행하여 모든 cd출력을 억제합니다.alias cd='> /dev/null cd', 그러나 다른 항목의 경로를 인쇄하고 싶습니다 CDPATH(또는 실행 시 cd -). 내가 할 수 있는 더 좋은 일이 없을까?

답변1

두 가지 단서:

  • CDPATH존재하지 않거나 빈 문자열 인 경우 cd SUBDIR정상적으로 작동하며 추가 오버플로가 인쇄되지 않습니다.

  • Bash 매뉴얼 페이지는 다음과 같이 말합니다.

이 변수는 CDPATH 다음을 포함하는 디렉터리의 검색 경로를 정의합니다 dir. CDPATH 검색에 포함된 각 디렉터리 이름 dir. 의 대체 디렉토리 이름은 CDPATH콜론( )으로 구분됩니다 :. 빈 디렉터리 이름은 CDPATH현재 디렉터리와 동일합니다. 즉, "."

매뉴얼 페이지는 지나치게 단순화된 것 같습니다. 분명히 빈 디렉토리 이름(즉, 빈 문자열)은 다음과 같습니다.아니요.CDPATH=.이는 추가 출력을 생성하지만 CDPATH=추가 출력을 생성하지 않는 것과 정확히 동일합니다. 그러나 빈 디렉터리는 에서 허용되고 CDPATH빈 디렉터리는 추가 출력을 생성하지 않으므로 다음을 사용할 수 있습니다.

# The first entry is intentionally an empty string.
CDPATH=":~/symlinks"

테스트(bash 4.4.12 사용)에서 예상대로 작동하는 것으로 확인되었습니다. 대신 to cd SUBDIR로 변경하고 실행합니다../SUBDIR~/symlinks/SUBDIR아니요추가 배출물을 인쇄합니다.

관련 정보