디렉토리에 대한 심볼릭 링크를 생성하는 쉘 스크립트에 명령을 넣고 싶지만이 스크립트는 계속 실행될 수 있으므로 후속 호출에서 명령은 아무것도 변경해서는 안됩니다.
디렉토리 구조는 다음과 같습니다.
% tree /tmp/test_symlink
/tmp/test_symlink
├── foo
└── repo
└── resources
└── snippets
├── php.snippets
├── sh.snippets
├── snippets.snippets
├── sql.snippets
└── vim.snippets
foo/
디렉토리를 가리키는 스 니펫이라는 심볼릭 링크를 만들고 싶습니다 /tmp/test_symlink/repo/resources/snippets
.
그래서 나는 달린다.
% ln -sfv /tmp/test_symlink/repo/resources/snippets /tmp/test_symlink/foo/snippets
'/tmp/test_symlink/foo/snippets' -> '/tmp/test_symlink/repo/resources/snippets'
원하는 결과를 제공합니다.
% tree /tmp/test_symlink
/tmp/test_symlink
├── foo
│ └── snippets -> /tmp/test_symlink/repo/resources/snippets
└── repo
└── resources
└── snippets
├── php.snippets
├── sh.snippets
├── snippets.snippets
├── sql.snippets
└── vim.snippets
5 개 디렉토리, 5 개 파일
그러나 명령을 다시 실행하면
% ln -sfv /tmp/test_symlink/repo/resources/snippets /tmp/test_symlink/foo/snippets
'/tmp/test_symlink/foo/snippets/snippets' -> '/tmp/test_symlink/repo/resources/snippets'
디렉토리에 대한 심볼릭 링크를 생성하고 심볼릭 링크가 존재하는 곳에서 심볼릭 링크를 실제 디렉토리에 넣습니다.
% tree /tmp/test_symlink
/tmp/test_symlink
├── foo
│ └── snippets -> /tmp/test_symlink/repo/resources/snippets
└── repo
└── resources
└── snippets
├── php.snippets
├── sh.snippets
├── snippets -> /tmp/test_symlink/repo/resources/snippets
├── snippets.snippets
├── sql.snippets
└── vim.snippets
왜 이런 일이 발생하고 후속 호출로 인해이 이상한 효과가 발생하지 않도록 명령을 수정하려면 어떻게해야합니까?
-n, --no-dereference treat LINK_NAME as a normal file if it is a symbolic link to a directory
.-T, --no-target-directory treat LINK_NAME as a normal file always
심볼릭 링크를 항상 파일로 취급하는 것이 낫다고 생각합니까? 이 "특별한"옵션의 사용을 제한하는 것이 더 좋을 것이라고 생각 했습니까?