Usando ~ no symlink target ou fazendo um symlink com uma variável

5

Eu gostaria de criar um symlink para ~/foo/ , mas quando eu escrevo isso, ~ é sempre resolvido para o caminho inicial absoluto. Eu usei ../ s no passado e eles funcionam bem, o ~ não é permitido?

O motivo pelo qual eu gostaria de fazer isso é porque ~ tem um caminho absoluto diferente, dependendo da máquina e do Linux / OSX, mas sempre aponta para meu diretório pessoal.

Gostaria de incluir esse link em um repositório de sincronização do Git em várias máquinas.

    
por Sheljohn 29.09.2015 / 12:17

2 respostas

5

O caractere til é expandido pelo shell antes do comando ser executado. Ele será substituído pelo valor de $HOME . Portanto, o utilitário ln que cria o symlink nunca verá o til, apenas o caminho completo. Este caminho será armazenado no symlink.

No Linux , não há nenhuma maneira de criar uma variável de link simbólico. Eles são manipulados pelo kernel. O kernel não honra variáveis de ambiente.

BSD permite esses links. Eles são chamados de links simbólicos variantes . Você pode fazer algo assim:

$ ln -s ’${variable}’ linkname
$ ls -l linkname
lrwxrwxrwx 1 root root 6 Sep 29 12:33 linkname -> ’${variable}’

Com varsym , essas variáveis podem ser definidas:

varsym variable=value cat linkname
[...] contents of file with name value [...]
    
por 29.09.2015 / 12:38
1

Para resolver sua dúvida sobre links simbólicos, "is ~ not allowed?".

Resposta: ~ não é permitido. Isso permitirá que você crie um link simbólico, mas ele não será resolvido no diretório inicial quando for seguido.

ln -s \~ d
ls -ld d
lrwxrwxrwx 1 steve steve 1 Sep 29 11:28 d -> ~
ls d
d
cd d
cd: d: No such file or directory
    
por 29.09.2015 / 12:31