Así que estoy escribiendo un pequeño administrador de paquetes, y un problema con el que me he encontrado es hacer enlaces simbólicos a los archivos.
Instala el paquete /usr/pkg/name-version
y luego lee un archivo para determinar qué enlaces simbólicos crear. Estoy usando ln
para hacer los enlaces, y me he encontrado con un problema al intentar instalar los encabezados de la API de Linux. Necesito vincular los archivos de encabezado ellos mismos, no las carpetas que los contienen (por lo tanto, si 2 paquetes necesitan colocar archivos en el mismo subdirectorio de inclusión, pueden hacerlo sin arruinar un paquete).
Resolví ese problema, pero ln
simplemente errores si la ruta está incompleta, lo cual es molesto porque esos directorios no deberían existir hasta que se instale el paquete.
¿Hay una bandera para ln
eso que creará los directorios que faltan, o voy a tener que usar un script bash complicado?
fuente
mkdir
para ... hacer directorios?lndir
.Respuestas:
No necesitará una secuencia de comandos bash enrevesada, sino una simple línea.
mkdir --parents
se encargará de todo, incluso no imprimirá un error si la estructura del directorio ya existe.Solo tenga cuidado con la forma en que trata estos directorios al eliminarlos, para no romper otros paquetes.
Además, como lo está escribiendo
bash
, puede echar un vistazo a la hechicería (complemento descarado). Tal vez sería más simple simplemente modificar eso, ya que es maduro y flexible.fuente
system()
no es más fácil, es muy difícil escapar de los argumentos de la línea de comandos correctamentesystem()
. Como mínimo, debe usarposix_spawn()
ofork()+exec*()
, que acepta argumentos de línea de comandos como matrices.No hay bandera para hacer esto
ln
. Crear directorios no es su trabajo.mkdir -p foo/bar/qux
crearáfoo
,foo/bar
yfoo/bar/qux
según sea necesario. Por lo tanto, llamemkdir -p
primero a todos menos al último componente de ruta.Parece que está reinventando
la ruedaStow , un administrador de paquetes simple que combina las jerarquías de directorios creando directorios a la profundidad requerida con enlaces simbólicos a componentes de diferentes paquetes en su interior. O tal vez XStow , que es como Stow pero con más posibilidades de personalización.fuente
Tal vez
tar
podría ayudar a preparar el archivo con los enlaces:Y luego para crear los enlaces donde sea necesario:
fuente