다음과 같은 심볼릭 링크 폴더가 있는 경우:
/home/user/foo/foo2 -> /home/user/bar/bar2
나는 다음을 수행합니다: /home/user/foo/foo2
.
을 실행하면 pwd
다음이 반환됩니다 /home/user/foo/foo2
. 엄청난!
그러나 만약 그렇다면 ls ../
그것은 내용을 반환할 것입니다 /home/user/bar
.
프로그램이 심볼릭 링크된 폴더에 있음을 알릴 수 있는 방법이 있습니까? 그래서 디렉토리로 들어가면 백링크를 따라갑니다.
답변1
일반적으로 그렇지 않습니다. 당신은 foo2에 없습니다. 그것은 환상입니다. 당신의 껍질은 환상을 유지하고 있기 때문에 그것을 볼 수 있습니다. 하지만 어떤 자식 프로세스도 그것에 대해 알지 못합니다.
$PWD 환경 변수를 확인하겠습니다. 쉘이 이를 팬텀으로 설정하고 하위 프로세스가 이를 볼 수 있는지 확인하십시오. 그러나 이는 사용자가 제어하는 코드에만 작동합니다. $PWD를 확인하셨군요. 다른 애플리케이션은 (실제로) cwd()를 호출합니다.
답변2
pwd
현재 출력이 심볼릭 링크인지 확인할 수 있습니다 . file
다음과 같은 유틸리티를 사용하여 이 작업을 수행 할 수 있습니다 stat
.
user@host:~/tmp$ mkdir -p sym/bar/bar
user@host:~/tmp$ mkdir -p sym/foo
user@host:~/tmp$ cd sym/foo/
user@host:~/tmp/sym/foo$ ln -s ../bar/bar/ ./foo
user@host:~/tmp/sym/foo$ ls -l
total 0
lrwxrwxrwx 1 user user 11 Feb 24 17:33 foo -> ../bar/bar/
user@host:~/tmp/sym/foo$ cd foo
user@host:~/tmp/sym/foo/foo$ pwd
/home/user/tmp/sym/foo/foo
user@host:~/tmp/sym/foo/foo$ file $(pwd)
/home/user/tmp/sym/foo/foo: symbolic link to ../bar/bar/
user@host:~/tmp/sym/foo/foo$ stat -c %F $(pwd)
symbolic link