4 votos

MacOS no puede crear un Symlink válido desde la terminal usando rutas relativas

Usando el siguiente fragmento se crea un symlink inválido. Pero según otras respuestas debería funcionar bien .

# make a temp dir and save path to var.
# set dir (mktemp -d)  # fish shell only!
dir=$(mktemp -d)  # bash/zsh
cd $dir
mkdir a b
echo 'text file' > a/file.txt
ln -s a/file.txt b/
open .

Cuando ves el enlace simbólico en el Finder no reconoce el tipo de archivo en la Vista Previa Rápida y cuando lo abres el Finder se queja de que "no se puede encontrar el elemento original".

Si se utilizan rutas absolutas todo funciona bien. Véase más abajo:

rm b/file.txt
ln -s $dir/a/file.txt $dir/b/
open .

Entonces puedes ver que el enlace simbólico está correctamente hecho y puedes incluso leer el contenido del archivo en la Vista Previa Rápida.

¿Cómo está ocurriendo esto? He comprobado que ln is /bin/ln . Estoy en MacOS Catalina 10.15.7 (19H2).

correct symlink and quick preview

8voto

Esto no está relacionado con fish ni a MacOS en general, el enlace simbólico resultante está simplemente roto

$ mkdir a b
$ touch a/foo.txt
$ ln -s a/foo.txt b/
$ cd b
$ cat foo.txt 
cat: foo.txt: No such file or directory
$ ll foo.txt 
lrwxr-xr-x  1 pse  staff  9 Feb  1 13:14 foo.txt@ -> a/foo.txt

Básicamente hay que pensar en el futuro cuando se crean enlaces simbólicos en un directorio diferente al actual. Me resulta más fácil ejecutar

$ cd b
$ ln -s ../a/foo.txt .

o simplemente evitar los enlaces simbólicos relativos en general.

4voto

yoliho Puntos 340

Tenga en cuenta que esto se refiere al sistema de archivos y no importa el shell que esté utilizando.

El problema es que el enlace simbólico sólo contiene el texto que le has pasado y luego el SO intenta resolverlo a partir de la ruta real del enlace. El enlace funciona como si se hace un cd a donde se almacena el enlace

Lo que ocurre es que cuando quieres ver b/archivo.txt el sistema operativo intenta abrir el archivo a/archivo.txt relativo al directorio b (es decir, $dir/b/a/archivo.txt) Lo que quieres que contenga el enlace es ../a/archivo.txt

Para crearla desde $dir

 ln -s ../a/file.txt b/

O desde cualquier lugar

 ln -s ../a/file.txt $dir/b/

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