그래서 저는 작은 패키지 관리자를 작성하고 있는데 제가 직면한 문제는 파일에 대한 심볼릭 링크를 만드는 것입니다.
패키지를 에 설치한 /usr/pkg/name-version
다음 파일을 읽어 어떤 심볼릭 링크를 만들 것인지 결정합니다. 링크를 만드는 데 을 사용하고 있는데 ln
Linux API 헤더를 설치하려고 할 때 문제가 발생했습니다. 헤더 파일을 포함하는 폴더가 아닌 헤더 파일 자체를 연결해야 합니다(따라서 2개의 패키지가 동일한 include 하위 디렉터리에 파일을 넣어야 하는 경우 하나의 패키지를 망치지 않고도 가능합니다).
그 문제는 제가 해결했지만 ln
경로가 불완전하면 단순히 오류가 발생합니다. 이는 패키지가 설치될 때까지 해당 디렉터리가 존재해서는 안 되기 때문에 짜증나는 일입니다.
누락된 디렉토리를 생성하는 플래그가 있습니까 ln
? 아니면 복잡한 bash 스크립트를 사용해야 합니까?
답변1
이 작업을 수행할 플래그가 없습니다 ln
. 디렉토리를 만드는 것은 그 일이 아닙니다.
mkdir -p foo/bar/qux
foo
필요에 따라 및를 foo/bar
생성 합니다 foo/bar/qux
. 따라서 mkdir -p
마지막 경로 구성 요소를 제외한 모든 구성 요소를 먼저 호출하십시오.
바퀴를 재발명하는 것 같군요 집어 챙겨 넣다, 내부의 다양한 패키지 구성 요소에 대한 심볼릭 링크를 사용하여 필요한 깊이까지 디렉터리를 생성하여 디렉터리 계층을 병합하는 간단한 패키지 관리자입니다. 아니면 아마도X스토우, 이는 Stow와 비슷하지만 더 많은 사용자 정의 가능성이 있습니다.
답변2
복잡한 bash 스크립트가 필요하지 않고 간단한 한 줄짜리 스크립트가 필요합니다. mkdir --parents
디렉토리 구조가 이미 존재하는 경우 오류를 인쇄하지도 않고 모든 것을 처리합니다.
제거 시 이러한 디렉토리를 처리하는 방법에 주의하여 다른 패키지를 손상시키지 마십시오.
또한 에 작성하고 있으므로 다음 bash
을 살펴보세요.마법(뻔뻔한 플러그). 성숙하고 유연하기 때문에 수정하는 것이 더 간단할 수도 있습니다.
답변3
tar
링크가 포함된 파일을 준비하는 데 도움이 될 수 있습니다 .
find . -type l > links.txt
tar cpf links.tar --files-from links.txt
그런 다음 필요한 곳에 링크를 생성하려면 다음을 수행하십시오.
tar xvf links.tar