1 votos

Los archivos de puntos enlazados no funcionan

Estoy en MacOS Catalina y estoy tratando de mover todos mis "dotfiles" en una carpeta, donde puedo colocarlos bajo el control de versiones, a continuación, symlink de nuevo en la carpeta de inicio. He creado una carpeta oculta ".dotfiles" dentro de la carpeta de inicio, movido los dotfiles en ella, luego symlinked de nuevo en la carpeta de inicio con:

ln -s <dotfile name> ..

Sin embargo, el terminal se queja de que los comandos asociados a esos dotfiles ya no se encuentran. No estoy seguro de lo que estoy haciendo exactamente mal, pero cualquier ayuda sería muy apreciada.

3voto

Tom Harrington Puntos 187

Su ln La sintaxis es errónea, lo que lleva a enlaces simbólicos autorreferenciales. Por ejemplo:

% mkdir .dotfiles
% cd .dotfiles/
% touch .foo
% ln -s .foo ..
% cd ..
% ls -l .foo
lrwxr-xr-x  1 tph  wheel  4 Dec  5 10:38 .foo@ -> .foo

En este punto .foo existe pero es un enlace simbólico a sí mismo, no a la copia en .dotfiles .

Probablemente la forma más fácil de hacerlo es cd ~ y hacer los enlaces simbólicos desde allí:

% cd ~
% ln -s .dotfiles/.foo .
% ls -l .foo 
lrwxr-xr-x  1 tph  wheel  14 Dec  5 10:46 .foo@ -> .dotfiles/.foo

1voto

notgoodatdns Puntos 16

ls -l en el directorio superior para ver a qué apunta el enlace.

Puede ser que encuentre que debe ser

cd ..
ln -s dotfile_dir/dotfile_name .

1voto

user3439894 Puntos 5883

Suponiendo que el .dotfiles directorio se añadió a $HOME y has movido el objetivo archivos de puntos en él, entonces utilice lo siguiente comando compuesto en Terminal :

<strong>Una pista: </strong>Copiar y pegar el <code>for in do</code> <em>comando </em>No hace falta que lo escriba.

cd .dotfiles
for f in .??*; do [ ! "$f" == ".DS_Store" ] || continue; ln -s "${HOME}/.dotfiles/${f}" "${HOME}/${f}"; done

A continuación, cierre y vuelva a abrir Terminal .

Esto creará un funcionamiento adecuado enlace simbólico para cada archivo de puntos en el $HOME/.dotfiles directorio en el $HOME directorio porque nombres de ruta totalmente cualificados se utilizaron.


<strong>Nota: </strong>El uso de <code>??</code> en <code>.??*</code> es para que no intentes hacer un <em>enlace simbólico </em>a <code>.</code> y <code>..</code> en el <code>.dotfiles</code> <em>directorio </em>como ya existen en <code>$HOME</code> y no los querrías <em>simbólico </em>de todos modos. Sin el calificador obtendrá <code>ln: ..//.: File exists</code> y <code>ln: ..//..: File exists</code> . También podría haber un <code>.DS_Store</code> archivo, que no quiere <em>enlace simbólico </em>tampoco, así que <code>[ ! "$f" == ".DS_Store" ] || continue;</code> lo maneja.

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X