2010-10-08 31 views
12

¿Podemos usar $ HOME u otra variable de entorno en enlaces simbólicos?Variables de entorno en enlaces simbólicos

saber acerca del uso de rutas relativas ../../.config pero a veces son para muchos ../ :) algo así como ~/.config sería más cómodo, o el uso de $ HOME.

Editar:

habbie 's respuesta con psmears' s comentario es la respuesta, lo siento mi pregunta era incompleta.

Mientras que otros (como muestran las respuestas), puede utilizar variables de entorno al crear enlaces simbólicos (como con cualquier comando shell!), No se puede tener en realidad variable de entorno (o '~') referencias en el enlace simbólico en sí

+0

Ojalá esto fuera posible. Un caso de uso: tiene un conjunto de enlaces simbólicos en un directorio ~/bin que apunta, por ejemplo, a scripts en un repositorio personal de git clonado en '$ HOME/my_github_scripts'. Desea vincular estos scripts desde el directorio '~/bin' en varias máquinas, pero su nombre de usuario es diferente. Así que no quiere codificar el nombre de usuario (puede ser '/ home/joebloggs' en la computadora de mi casa pero'/home/jbloggs' en el trabajo, o incluso '/ Users/joebloggs' en una Mac). –

+0

Si quieres probar algo exótico puedes mirar en ROFS Filtered. –

Respuesta

29

Los enlaces simbólicos son manejados por el kernel, y al kernel no le importan las variables de entorno. Entonces, no.

+10

No estoy seguro de quién modificó esto sin dejar un comentario: la respuesta es correcta. Mientras (como muestran otras respuestas) puede usar variables de entorno cuando * crea * enlaces simbólicos (como con cualquier comando de shell), no puede tener referencias de variables de entorno (o '~') en el enlace simbólico mismo. – psmears

+0

gracias esa era la pregunta. – kfl62

+1

¿podría usted, por casualidad, vincular el archivo fuente relevante en el kernel? – n611x007

2

sí. No hay problema. en realidad, en realidad no usará la variable $ HOME en su enlace, por lo que no funcionará con soluciones inteligentes para grupos de usuarios, por ejemplo. La variable se traduce por el shell al ejecutar el comando, y el contenido de la variable se usa en el enlace.

ln -s ~/test /tmp/test 

se expaned a

/<path>/<to>/home/test -> /tmp/test 

Ah. y solo las variables de entorno de la persona que llama a ln funcionarán. No puede almacenar variables de entorno de otras personas en el enlace. Las variables se expanden antes de llamar al comando.

+0

Acabo de probar esto en una caja de Centos y lo que escribe thomasmalt es correcto. La variable se traducirá en el momento de crear el enlace simbólico y no se actualizará dinámicamente si cambia la variable de entorno. – kskjon

-1

Sí, puedes.

ln -s $HOME/file/or/folder newname 

Puede establecer sus propias variables y usarlas también. Añadir en su .bashrc (o .bash_profile):

export $MYPATH=/your/path 
+0

Mira la respuesta de thomasmalt. Lo que ha dicho es correcto en sí mismo, pero la cuestión es tener la variable de entorno almacenada en el enlace de forma que se consulte el entorno cada vez que se sigue el enlace (lo que no es posible). –

+1

No creo que esta respuesta entendiera realmente el contexto de la pregunta. –

2

Si no desea ampliar la variable en el enlace se puede poner entre comillas simples,

ln -s '$HOME/file/or/folder' newname 

Esto daría,

newname -> $HOME/file/or/folder 

en lugar de expandirlo a su configuración local $ HOME.

[Nota esto depende del sistema - no todos los sistemas soportan los enlaces simbólicos variantes]

+0

Tengo curiosidad si puede nombrar un sistema que * no *? :) – conny

+0

Parece que puedo hacer esto en OS X 10.9. – JacobEvelyn

+0

@JacobEvelyn Acabo de probar OS X 10.9. Se almacenó correctamente el nombre de la variable de entorno en el enlace ('/ tmp/currenthome -> $ HOME'), pero el destino del enlace no se pudo resolver con éxito. ('-bash: cd:/tmp/currenthome: No existe ese archivo o directorio') –

0

Lo más cerca que he podido venir está utilizando un sistema de ficheros FUSE. Es bastante simple usar fusepy para escribir un sistema de archivos de paso personalizado, que puede leer variables de entorno al determinar qué archivo real dar. Por supuesto, solo obtiene las variables de entorno del proceso que montaba el sistema de paso a través, por lo que no es tan útil como podría ser.

Cuestiones relacionadas