사용이것.bashrc
답변, 일반적으로 사용되는 디렉터리로 쉽게 변경할 수 있도록 파일에 심볼릭 링크를 만들었습니다 .
예를 들어
ln -s ~/a/b/c/d/development dev
home
입력을 통해 내 디렉토리에서 디렉토리로 디렉토리를 변경할 수 있습니다 . 내 디렉토리에서 들어갈 수도 있는데 이것도 작동합니다.development
cd dev
ls dev
home
그러나 이러한 명령은오직내 디렉토리에서 작동합니다 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
스크립트나 함수(링크 제외)를 사용하여 원하는 동작을 얻을 수 있습니다. 예를 들어, 쉘의 초기화 파일( ~/.bashrc
bash의 경우)에 다음 행을 추가하십시오.
dev(){
cd "$HOME"/dev
}
그렇지 않으면:
alias dev='cd ~/dev'
이제 달려가면 dev
그곳으로 갈 수 있습니다 ~/dev
. 또는 또는 ~/bashrc
에서 변수를 정의하십시오 ~/.profile
.
dev="$HOME/dev"
이제 실행 cd $dev
하여 으로 이동할 수 있습니다 ~/dev
. 이는 여러 가지 방법으로 달성할 수 있지만 링크는 관련이 없습니다.