디렉토리의 심볼릭 링크 변경은 홈 디렉토리에서만 작동합니다.

디렉토리의 심볼릭 링크 변경은 홈 디렉토리에서만 작동합니다.

사용이것.bashrc답변, 일반적으로 사용되는 디렉터리로 쉽게 변경할 수 있도록 파일에 심볼릭 링크를 만들었습니다 .

예를 들어

ln -s ~/a/b/c/d/development dev

home입력을 통해 내 디렉토리에서 디렉토리로 디렉토리를 변경할 수 있습니다 . 내 디렉토리에서 들어갈 수도 있는데 이것도 작동합니다.developmentcd devls devhome

그러나 이러한 명령은오직내 디렉토리에서 작동합니다 home. 다른 곳에서 입력하면 오류 메시지가 나타납니다 No such file or directory.

내가 입력 cd ~/dev하거나 ls ~/dev작동하면.

~/누군가 이런 일이 발생하는 이유와 이를 수정하여 홈 디렉토리에 없을 때 경로에 포함할 필요가 없도록 설명할 수 있습니까?

답변1

Bash를 쉘로 사용하고 있으므로 CDPATH쉘 변수를 사용할 수 있습니다. 이것배쉬 매뉴얼그것을 다음과 같이 묘사하다

검색 경로: CDPATH의 각 디렉터리 이름 내에서 디렉터리를 검색하며, CDPATH에서 콜론(':')으로 구분된 대체 디렉터리 이름을 사용합니다.

다음 줄을 다음 줄에 추가할 수 있습니다 .bashrc.

CDPATH=".:$HOME"

나중에 입력하면 cd dev현재 작업 디렉토리에서 다음 이름의 하위 디렉토리가 검색됩니다 dev.

  • 그러한 디렉토리가 존재하는 경우 해당 디렉토리로 변경됩니다( cd내장 명령이 일반적으로 수행하는 것처럼).
  • 그렇지 않은 경우 홈 디렉토리( ~)를 검색하고 심볼릭 링크(디렉토리에 대한 링크임을 인식)를 찾아 대상 디렉토리( 가 가리키는 ~/dev)로 변경합니다.

홈 디렉토리에서 디렉토리의 우선 순위를 지정하려면 $HOME먼저 ( ) 안에 나열하면 되지만, 깨지기 때문에 이렇게 하지 않는 것이 좋습니다.CDPATH"$HOME:."최소 놀라움의 원리: 결과적인 동작이 표준에서 너무 많이 벗어납니다.

답변2

당신은 할 수 없습니다. 어떻게 할 수 있습니까? 이 ln명령은 다른 파일(또는 디렉터리 또는 기타 파일)에 대한 링크인 파일을 생성합니다. 그런 다음 원래 링크처럼 링크를 사용할 수 있습니다. 하지만 여전히 파일일 뿐입니다. 특정 경로가 있으며 마술처럼 떠다니는 것이 아니며 파일 시스템의 어느 곳에서나 액세스할 수 있습니다. 다른 파일과 마찬가지로 단순히 이름으로 호출할 수 없으며 해당 경로를 사용해야 합니다.

일반 파일을 생성하는 것과 같습니다:

$ cd ~/foo
$ touch file
$ cd ~/
$ ls file
ls: cannot access 'file': No such file or directory
$ ls ~/foo/file
file

링크도 다르지 않습니다. 임의의 디렉토리에서 cd를 하고 시스템이 원하는 파일을 마법처럼 알 것이라고 기대할 cd dev수 없는 것처럼 임의의 디렉토리에서 cd를 하고 작동할 것이라고 기대할 수는 없습니다 .cat file

스크립트나 함수(링크 제외)를 사용하여 원하는 동작을 얻을 수 있습니다. 예를 들어, 쉘의 초기화 파일( ~/.bashrcbash의 경우)에 다음 행을 추가하십시오.

dev(){
    cd "$HOME"/dev
}

그렇지 않으면:

alias dev='cd ~/dev'

이제 달려가면 dev그곳으로 갈 수 있습니다 ~/dev. 또는 또는 ~/bashrc에서 변수를 정의하십시오 ~/.profile.

dev="$HOME/dev"

이제 실행 cd $dev하여 으로 이동할 수 있습니다 ~/dev. 이는 여러 가지 방법으로 달성할 수 있지만 링크는 관련이 없습니다.

관련 정보