CDPATH의 cd 명령에 대한 "대체 디렉터리 이름"은 무엇입니까?

CDPATH의 cd 명령에 대한 "대체 디렉터리 이름"은 무엇입니까?

CD 및 Bash 도움말 페이지에서:

The variable CDPATH defines the search path for the directory containing
DIR.  Alternative directory names in CDPATH are separated by a colon (:).
A null directory name is the same as the current directory.  If DIR begins
with a slash (/), then CDPATH is not used.

:하지만 "대체 디렉터리"라는 개념을 이해하지 못하고 명령에서 콜론( )을 사용하는 예를 찾을 수 없습니다 cd.

답변1

이 변수는 기본적으로 설정되어 있지 않지만(적어도 내가 익숙한 시스템에서는)할 수 있는지정한 대상 디렉토리를 검색하기 위해 다른 디렉토리를 사용하도록 설정합니다 cd. 예를 들어 이를 설명하는 것이 더 쉬울 수 있습니다.

$ echo $CDPATH    ## CDPATH is not set

$ cd etc          ## fails: there is no "etc" directory here
bash: cd: etc: No such file or directory
$ CDPATH="/"      ##CDPATH is now set to /
$ cd etc          ## This now moves us to /etc
/etc

즉, 기본 동작은 cd foo"현재 디렉터리의 하위 디렉터리인 "foo"라는 디렉터리로 이동하는 것입니다.또는"디렉터리"는 CDPATH에 지정된 다른 디렉터리에 있습니다. CDPATH설정하지 않으면 cd현재 디렉터리에서만 검색되지만 설정되면 설정한 디렉터리에서도 일치하는 항목을 찾습니다.

콜론은 와 함께 사용되지 않으며 cd, 에 설정할 디렉토리를 구분하는 데 사용됩니다 CDPATH.

CDPATH="/path/to/dir1:/path/to/dir2:/path/to/dirN"

답변2

설명서에, CDPATH다음과 같이 설명됩니다.

cd 명령의 검색 경로입니다. 이는 쉘이 cd 명령으로 지정된 대상 디렉토리를 찾는 콜론으로 구분된 디렉토리 목록입니다. 예제 값은 ".:~:/usr"입니다.

완전성을 위해 여기에는 다음과 비슷한 것이 있습니다. 특별한.

$~> mkdir /tmp/2 ./2 ./3
$~> cd 2
$~/2> cd ..
$~> CDPATH=/tmp
$~> cd 2
/tmp/2
$~> cd ~
$~> cd 3
$~/3> 

보시다시피 일단 설정되면 CDPATH=/tmpBash는 /tmp먼저 가능한 대상 디렉터리를 찾습니다. 에서 찾을 수 없으면 /tmp현재 디렉터리에서 찾으려고 시도합니다. 우리는 또한 (쉘 내장 함수)

CDPATH의 비어 있지 않은 디렉토리 이름이 사용되거나 -가 첫 번째 인수이고 디렉토리 변경이 성공하면 새 작업 디렉토리의 절대 경로 이름이 표준 출력에 기록됩니다.

나는 또한 이것을 공유하고 싶다:

$~> CDPATH=.:/tmp
$~> cd 2
/home/myuser/2
$~/2> cd 2
/tmp/2

이 연속에서는 CDPATH두 개의 디렉토리가 제공됩니다. 첫 번째는 .현재 디렉터리입니다. 먼저 오기 때문에 노력한 후에 도착할 cd 2것입니다 . 와 마찬가지로 먼저 나열된 디렉토리가 우선순위를 갖습니다./home/myuser/2/tmp/2$PATH

답변3

다른 답변은 CDPATH의 기본 사용법을 설명하지만 구체적인 사용 사례는 예시라고 생각합니다. 동일한 루트 디렉터리에서 시작하여 일련의 하위 디렉터리에서 작업을 반복적으로 수행하고 싶은 경우가 종종 있습니다.

cd ~/wrk
for d in */.git/hooks/; do
  ( cd "$d" && mv pre-commit pre-commit.off )
done

각 반복이 동일한 루트에서 시작되도록 하려면 서브쉘이 필요합니다. 아니면 그럴까요? 여기서 서브쉘 복제를 피할 수 있나요? 우리는 할 수 있습니다!

cd ~/wrk &&
CDPATH=$PWD
for d in */.git/hooks; do
  cd "$d" && mv pre-commit pre-commit.off
done

이는 cd가 각 단계의 진행 상황을 알려준다는 추가 이점이 있습니다.

대체 디렉토리 이름은 어떻습니까? 특히 콰지모도의 사례가 좋은 것 같아요. .CDPATH에 없으면 CDPATH가 우선 적용됩니다 . 그러나 이전 디렉터리가 우선적으로 적용되도록 하려면 CDPATH가 ..

관련 정보