Enlace simbólico a la carpeta actual como ruta absoluta sin escribir la ruta completa

10

Los enlaces simbólicos son atajos guardados para rutas relativas:

~/foo ln -s . ~/bar/foo
~/foo ls -l ~/bar
total 8
lrwxr-xr-x    1 me  me     1B 15 May 14:38 foo -> .

El archivo ~/bar/fooes un enlace simbólico al bardirectorio actual de s, es decir, a sí mismo

¿Qué sucede si quiero crear un enlace simbólico en otro directorio al directorio en el que estoy en ese momento? Entonces, en el ejemplo anterior, estoy dentro ~/fooy quiero crear ~/bar/foocomo un enlace simbólico para ~/foo. Por supuesto, mi directorio actual puede tener un poco más de 5 caracteres y no ser tan fácil de escribir.

Gareth
fuente

Respuestas:

13

Yo diría tipo

ln -s $PWD ~/bar/

o

ln -s `pwd` ~/bar/

Podrías usar también

ln -s $PWD ~/bar/

pero supongo que lo sabías y eso no es lo que estás buscando. Entonces, ¿podría actualizar su pregunta para explicar cuál es su objetivo?

Si la ruta contiene espacios, sería aconsejable usar:

ln -s "$PWD" ~/bar/
Huygens
fuente
2
Comillas dobles de sus $variables y sustituciones de comandos, de lo contrario, los nombres de archivo con espacios arruinarán la ejecución. Tampoco necesita el final $(basename $PWD)(y ha olvidado un $(y citando :-))) ya que ese es el nombre de enlace predeterminado de todos modos.
Daniel Andersson
Creo que estaba siendo estúpido. Pensé que probé el pwdenfoque y algo salió mal. Vamos a explicarlo como un error ID-ten-T
Gareth,
@DanielAndersson tienes razón en que no admite espacios en la ruta. Buen punto. así que para el registro actualizaré la respuesta :)
Huygens
4

Absolutamente:

ln -s "$(readlink -f .)" ~/bar

(podría ser bueno para la generalidad en los scripts) o simplemente

ln -s ~/foo ~/bar

Relativamente:

ln -s ../foo ~/bar

La finalización de la pestaña te ayudará a escribir.


Del comentario de grawity y http://lists.gnu.org/archive/html/coreutils-announce/2012-03/msg00000.html :

* Cambios notables en la versión 8.16 (2012-03-26) [estable]

...

lnahora acepta la --relativeopción de generar un enlace simbólico relativo a un objetivo, independientemente de cómo se especifique el objetivo.

Entonces con esta versión:

ln -s --relative . ~/bar

debería funcionar (con en la práctica es idéntico su primer ejemplo, con la adición del --relativeinterruptor).

Daniel Andersson
fuente
44
Los últimos coreutils pueden crear automáticamente enlaces simbólicos relativos usando ln -s -r foo ~/bar.
usuario1686
@grawity: Interesante. Todavía no en mi sistema, aparentemente (Debian Sid).
Daniel Andersson
Parece haber sido agregado para v8.16 el 22 de marzo, según git.
user1686
1
Además, ¿cuál es la ventaja de $(readlink -f .)más $PWD?
user1686
2
@grawity: no mucho. Funcionan de manera diferente si se ha alcanzado el directorio de trabajo actual mediante un enlace. readlink -fluego hará un enlace simbólico a la ruta de destino absoluta del directorio actual, mientras que $PWDhará un enlace simbólico al directorio literal en el que se encuentra actualmente. Lo que se desea probablemente sea diferente de vez en cuando, y ante todo probablemente no sea un problema en absoluto.
Daniel Andersson