그래서 나는 쉘에 "논리적" 모드와 "물리적" 모드가 있다는 pwd
것을 알고 있습니다(참조:cd
이 문제그리고 거기에서 연결된 질문).
이제 다음 심볼릭 링크가 있다고 가정해 보겠습니다.
/home/<username>/foo -> /tmp/bar
로컬로 수행하려면 다음을 수행하십시오.
mkdir /tmp/bar
ln -s /tmp/bar ~/foo
$HOME
이제 my 및 cd
into를 시작하면 를 foo
통해 "논리적" 경로(기본 설정 사용)를 얻을 수 있고 다음을 pwd
통해 "물리적" 경로를 얻을 수 있습니다 -P
.
$ cd ~/foo
$ pwd
/home/<username>/foo
$ pwd -P
/tmp/bar
물론, " ..
"는 항상 "물리적" 경로의 상위 경로를 나타냅니다(제가 이해한 바에 따르면 이 경로는 쉘에 의해 해석되지도 않고 있는 그대로 명령에 전달되며, 일부 특수 내장 명령(예: cd
구체적으로 해석) ) ) "논리적" 동작을 얻으려면 ):
$ pwd
/home/<username>/foo
$ realpath ..
/tmp
내가 원하는 것은 $HOME/foo
내가 사용하는 상대 경로(예: )가 (또는 그 하위 디렉터리에 있을 때) ls -l ../..
"논리적" 경로를 기준으로 해석/확장되는 것입니다(명령 앞에 OK를 붙여야 하는 경우).
예를 들어:
$ pwd
/home/<username>/foo
$ vi ../something.txt
나는 이 문제를 해결하고 싶다 vi /home/<username>/something.txt
.
다음을 수행하는 것(또는 모든 인수를 반복하기 위해 명령 앞에 추가할 수 있는 셸 함수를 작성하고 경로를 참조하는 경우 명령에 전달하기 전에 확장하는 것)보다 더 간단하고 짧은 것이 있습니까?
$ pwd
/home/<username>/foo
$ realpath -L $PWD/../something.txt
/home/<username>/something.txt
$ vi $(realpath -L $PWD/../something.txt)
"셸이 명령을 실행하기 전에 명령줄 인수의 논리적 경로 확장이 상대 파일 경로로 수행됩니다"와 같은 것이 있습니까? 을 사용하고 있지만 or에 대한 zsh
어떤 bash
솔루션 이라도 zsh
괜찮을 것입니다.
답변1
나는 Zsh를 사용하여 이 질문에 답할 것입니다. 왜냐하면 그것이 제가 사용하고 있는 것이기 때문입니다.
..
사용할 때 원하는 효과를 얻으려면 파일 cd
에 다음을 추가하면 됩니다 ~/.zshrc
.
setopt NO_chase_dots NO_chase_links
문서는 여기에 있습니다:http://zsh.sourceforge.net/Doc/Release/Options.html#index-CHASEDOTS
..
:h
다른 모든 경우에는 ("head") 확장 수정자를 대신 사용해야 합니다 .
$ pwd
/home/<username>/foo
$ vi $PWD:h/something.txt
두 개 이상의 수준으로 이동해야 하는 경우 해당 수준에 숫자를 추가하거나(표현식을 중괄호로 묶은 경우) 다음을 반복할 수 있습니다 :h
.
# These two are equivalent:
$ vi ${PWD:h2}/foo
$ vi $PWD:h:h/foo
문서는 여기에 있습니다:http://zsh.sourceforge.net/Doc/Release/Expansion.html#Modifiers