CDPATH
bash를 사용하여 내가 자주 방문하는 디렉토리에 디렉토리를 심볼릭 링크 하고 싶습니다 . 그러나 다음을 수행하십시오.
CDPATH="~/symlinks"
둘 다 있으면 cd SUBDIR
작업이 중지됩니다. 해당 디렉터리가 현재 작업 디렉터리보다 우선합니다../SUBDIR
~/symlinks/SUBDIR
CDPATH
나는 다음을 사용하여 이 문제를 해결하려고 했습니다.
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
아니요추가 배출물을 인쇄합니다.