J'écris donc un petit gestionnaire de paquets, et un problème que j'ai rencontré est de créer des liens symboliques vers des fichiers.
Il installe le package dans /usr/pkg/name-version
, puis lit un fichier pour déterminer les liens symboliques à créer. J'utilise ln
pour créer les liens et j'ai rencontré un problème lors de la tentative d'installation des en-têtes d'API Linux. J'ai besoin de lier les fichiers d'en-tête eux-mêmes, pas les dossiers qui les contiennent (donc si 2 paquets doivent mettre des fichiers dans le même sous-répertoire d'inclure, ils peuvent le faire sans visser un paquet).
Ce problème, j'ai résolu, mais ln
simplement des erreurs si le chemin est incomplet, ce qui est ennuyeux car ces répertoires ne devraient pas exister jusqu'à ce que le package soit installé.
Y a-t-il un indicateur pour ln
créer des répertoires manquants, ou vais-je devoir utiliser un script bash alambiqué?
la source
mkdir
pour ... créer des répertoires?lndir
.Réponses:
Vous n'aurez pas besoin d'un script bash alambiqué, mais d'un simple liner.
mkdir --parents
va s'occuper de tout, et même pas imprimer une erreur si la structure du répertoire existe déjà.Faites juste attention à la façon dont vous traitez ces répertoires lors de leur suppression, afin de ne pas casser les autres packages.
De plus, puisque vous l'écrivez
bash
, vous pouvez jeter un œil à la sorcellerie (plug sans vergogne). Il serait peut-être plus simple de simplement modifier cela, car il est mature et flexible.la source
system()
n'est pas plus facile, il est très difficile d'échapper correctement aux arguments de la ligne de commandesystem()
. À tout le moins, vous devez utiliserposix_spawn()
oufork()+exec*()
, qui accepte les arguments de ligne de commande en tant que tableaux.Il n'y a pas de drapeau pour faire ça
ln
. La création de répertoires n'est pas son métier.mkdir -p foo/bar/qux
va créerfoo
,foo/bar
etfoo/bar/qux
au besoin. Appelez doncmkdir -p
tous les composants sauf le dernier chemin.Il semble que vous réinventiez
la roueStow , un simple gestionnaire de packages qui fusionne les hiérarchies de répertoires en créant des répertoires à la profondeur requise avec des liens symboliques vers les composants de différents packages à l'intérieur. Ou peut-être XStow , qui est comme Stow mais avec plus de possibilités de personnalisation.la source
Peut
tar
- être pourrait aider à préparer le fichier avec les liens:Et puis pour créer les liens là où c'est nécessaire:
la source