Un enlace simbólico en realidad almacena la ruta que das literalmente, como una cadena¹. Eso significa que su enlace ~/mylinkcontiene " ." (un carácter). Cuando accede al enlace, esa ruta se interpreta en relación con el lugar del enlace, en lugar de donde estaba cuando creó el enlace.
En cambio, puede almacenar la ruta real que desea en el enlace:
ln -s "$(pwd)"~/mylink
usando la sustitución de comandos para poner la salida de pwd(el nombre del directorio de trabajo) en su línea de comando. lnve la ruta completa y la almacena en su enlace simbólico, que luego apuntará al lugar correcto.
El primero no necesariamente ayudará en todos los shells (ver esta respuesta ). El OP probablemente quiera usar $PWD(la ruta que usó para llegar allí), en lugar de $(pwd -P)(la ruta canónica al directorio actual). Si $PWDya no apunta al directorio actual, tampoco se puede decir eso $(pwd -P)en el próximo minuto.
@ StéphaneChazelas: Puede ver que "$PWD"todavía tiene el valor anterior si se mueve el directorio actual. PWDsolo se establece cuando usted cdo se inicializa por el shell.
Cuonglm 01 de
Pero lo que digo es que es probable que el OP quiera el viejo $ PWD que alguna ruta absoluta al directorio de trabajo actual y que en varios shells (ksh93, ash, yash), como se explica allí,cd no se garantiza que las llamadas se realicen $ PWD o la salida de pwd una ruta al directorio actual. Estás tratando de protegerte contra algo que no es probable que suceda, pero en la primera solución, eso no es necesariamente efectivo, y en la segunda, eso está cambiando el comportamiento.
Stéphane Chazelas
1
Si alguien hace la mvtras lo hace ln, entonces termina en la misma situación. Por otro lado, si lo hizo cd /long/logical/path/to/some/directory, no desea que el enlace apunte a /vg0/lv1/user2/app4(la ruta canónica) ya que el enlace apuntará al lugar incorrecto cuando /long/logical/path/to/some/directoryapunte a otro lugar.
"$PWD"
en shells POSIX y~0
enzsh
.Deberías usar:
o:
para obtener el resultado correcto para el directorio de trabajo actual. Se puede cambiar mientras trabajaba en él como en esta pregunta .
fuente
$PWD
(la ruta que usó para llegar allí), en lugar de$(pwd -P)
(la ruta canónica al directorio actual). Si$PWD
ya no apunta al directorio actual, tampoco se puede decir eso$(pwd -P)
en el próximo minuto."$PWD"
todavía tiene el valor anterior si se mueve el directorio actual.PWD
solo se establece cuando ustedcd
o se inicializa por el shell.cd
no se garantiza que las llamadas se realicen $ PWD o la salida de pwd una ruta al directorio actual. Estás tratando de protegerte contra algo que no es probable que suceda, pero en la primera solución, eso no es necesariamente efectivo, y en la segunda, eso está cambiando el comportamiento.mv
tras lo haceln
, entonces termina en la misma situación. Por otro lado, si lo hizocd /long/logical/path/to/some/directory
, no desea que el enlace apunte a/vg0/lv1/user2/app4
(la ruta canónica) ya que el enlace apuntará al lugar incorrecto cuando/long/logical/path/to/some/directory
apunte a otro lugar.