Piszę więc małego menedżera pakietów, a problemem, na który natrafiłem, jest tworzenie dowiązań symbolicznych do plików.
Instaluje pakiet /usr/pkg/name-version
, a następnie czyta plik, aby ustalić, jakie dowiązania symboliczne należy utworzyć. Używam ln
do tworzenia linków i napotkałem problem podczas próby zainstalowania nagłówków Linux API. Muszę połączyć same pliki nagłówków, a nie foldery, które je zawierają (więc jeśli 2 pakiety muszą umieścić pliki w tym samym podkatalogu include, mogą to zrobić bez zepsucia jednego pakietu).
Ten problem rozwiązałem, ale ln
po prostu popełniam błąd, jeśli ścieżka jest niekompletna, co jest denerwujące, ponieważ te katalogi nie powinny istnieć, dopóki pakiet nie zostanie zainstalowany.
Czy istnieje flaga ln
, która utworzy brakujące katalogi, czy też będę musiał użyć jakiegoś skomplikowanego skryptu bash?
źródło
mkdir
... tworzenia katalogów?lndir
.Odpowiedzi:
Nie potrzebujesz zawiłego skryptu bash, ale prostego, jednowierszowego.
mkdir --parents
zajmie się wszystkim, ładnie nawet nie drukując błędu, jeśli struktura katalogów już istnieje.Uważaj tylko na sposób, w jaki traktujesz te katalogi podczas usuwania, aby nie uszkodzić innych pakietów.
Ponadto, skoro to piszesz
bash
, możesz rzucić okiem na czary (bezwstydna wtyczka). Być może łatwiej byłoby to po prostu zmodyfikować, ponieważ jest ono dojrzałe i elastyczne.źródło
system()
nie jest łatwiejsze, bardzo trudno jest poprawnie uniknąć argumentów wiersza poleceńsystem()
. Przynajmniej powinieneś użyćposix_spawn()
lubfork()+exec*()
, który akceptuje argumenty wiersza poleceń jako tablice.Nie ma flagi, aby to zrobić
ln
. Tworzenie katalogów nie jest zadaniem.mkdir -p foo/bar/qux
stworzyfoo
,foo/bar
afoo/bar/qux
w razie potrzeby. Więcmkdir -p
najpierw wzywaj wszystkie oprócz ostatniej ścieżki.Wygląda na to, że wymyślasz
nanowokołoStow , prosty menedżer pakietów, który łączy hierarchie katalogów, tworząc katalogi na wymaganą głębokość z symbolicznymi linkami do komponentów różnych pakietów w środku. A może XStow , który jest jak Stow, ale ma więcej możliwości dostosowywania.źródło
Może
tar
może pomóc w przygotowaniu pliku z linkami:Następnie w razie potrzeby utwórz linki:
źródło