La forma más fácil de vincular al directorio actual como una ruta absoluta, sin escribir la cadena de ruta completa sería
ln -s "$(pwd)/foo" ~/bin/foo_link
El target
(primer) argumento para el ln -s
comando funciona en relación con la ubicación del enlace simbólico, no con su directorio actual. Es útil saber que, esencialmente, el enlace simbólico creado (el segundo argumento) simplemente contiene el texto que proporciona para el primer argumento.
Por lo tanto, si haces lo siguiente:
cd some_directory
ln -s foo foo_link
y luego mover ese enlace
mv foo_link ../some_other_directory
ls -l ../some_other_directory
verá que foo_link
intenta señalar foo
en el directorio en el que reside. Esto también funciona con enlaces simbólicos que apuntan a rutas relativas. Si haces lo siguiente:
ln -s ../foo yet_another_link
y luego pasar yet_another_link
a otro directorio y verificar hacia dónde apunta, verá que siempre apunta ../foo
. Este es el comportamiento previsto, ya que muchas veces los enlaces simbólicos pueden ser parte de una estructura de directorio que puede residir en varias rutas absolutas.
En su caso, cuando cree el enlace escribiendo
ln -s foo ~/bin/foo_link
foo_link
solo tiene un enlace a foo
, relativo a su ubicación. Poner $(pwd)
delante del nombre del argumento objetivo simplemente agrega la ruta absoluta del directorio de trabajo actual, de modo que el enlace se crea con un objetivo absoluto.
source_file
(primer) argumento es donde apunta el enlace, que es literalmente lo que ingresa en el comando. Eltarget_file
(segundo) argumento se convierte en el nombre del enlace a menos que lo que ingrese sea un directorio, en cuyo caso el nombre del enlace es el mismo que el nombre base delsource_file
pero colocado en el directoriotarget_file
.ln
página de manual,target
es el primer argumento (donde los puntos de enlace a ), mientras que el segundo argumento es simplemente denominado como ellink
(source
no se menciona).target
y al segundolink
( man7.org/linux/man-pages/man1/ln.1.html ). Pero en BSD (incluido OS X) se llama al primerosource
y al segundotarget
( freebsd.org/cgi/man.cgi?ln ). Bastante confuso.Usar la bandera
-r
(--relative
) hará que esto funcione:fuente
-r
es un GNUism, es decir, no POSIX, por lo que no funcionará en el caso de OP ya que elln
comando estándar de OS X está basado en BSD.Para guardar algo de mecanografía, puedes hacer
fuente
*
,?
y[...]
).bash
, por lo que generalmente es una buena idea citarla. Lo malo, debería haber sido más específico.Qué tal si:
fuente