Links simbólicos do Linux: como ir para o diretório apontado?

0

Eu tenho um projeto em seu próprio diretório:

/dir/to/project/

Eu tenho um link simbólico para esse diretório na área de trabalho:

/home/user/Desktop/project/

Quando clico duas vezes nesse link, a janela do diretório que é aberta é:

/home/user/Desktop/project/

em vez do real, /dir/to/project .

O mesmo acontece com a linha de comando (Bash).

É possível obter o que desejo, ou seja, ir ao diretório apontado, em vez do simbólico?

Nota: o ambiente Windows que estou usando agora é o Xfce, mas também estou interessado em uma resposta genérica.

    
por Pietro 09.04.2018 / 12:56

3 respostas

5

Em bash , o cd incorporado usa -P e -L switches; pwd os entende da mesma maneira:

user@host:~$ ln -s /bin foobar
user@host:~$ cd -L foobar      # follow link
user@host:~/foobar$ pwd -L     # print $PWD
/home/user/foobar
user@host:~/foobar$ pwd -P     # print physical directory
/bin
user@host:~/foobar$ cd -       # return to previous directory
/home/user
user@host:~$ cd -P foobar      # use physical directory structure
user@host:/bin$ pwd -L         # print $PWD
/bin
user@host:/bin$ pwd -P         # print physical directory
/bin

Além disso, cd .. pode ser complicado:

user@host:/bin$ cd
user@host:~$ cd -L foobar
user@host:~/foobar$ cd -L ..   # go up, to ~/
user@host:~$ cd -L foobar
user@host:~/foobar$ cd -P ..   # go up, but not to ~/
user@host:/$

Veja help cd e help pwd . Note que você também pode ter um executável (isto é, não um shell integrado) como /bin/pwd que deve se comportar de maneira semelhante. No meu Kubuntu, a diferença é que pwd embutido sem nenhuma opção usa -L , enquanto /bin/pwd , por padrão, usa -P .

Você pode ajustar o comportamento padrão de cd incorporado por set -P ( cd age como cd -P ) e set +P ( cd age como cd -L ). Veja help set para detalhes.

    
por 24.08.2018 / 13:50
2

Use readlink para resolver o link para o alvo:

cd $(readlink thelink)

Você pode querer definir uma função no seu perfil bash:

function cdl { local dir=$(readlink -e $1); [[ -n "$dir" ]] && cd $dir; }
    
por 09.04.2018 / 14:28
1

Eu não sei como alcançá-lo na GUI, mas há uma solução alternativa na linha de comando.

Digamos que seu link simbólico seja:

/home/user/Desktop/project/

então, Você pode usar o comando readlink para obter o link simbólico resolvido ou é nome do arquivo canônico. Então apenas cd para isso.

cd 'readlink /home/user/Desktop/project'

Aqui, readlink resolve o nome do link e passa para cd usando substituição .

Se você já estiver na pasta Desktop, não será necessário especificar o caminho absoluto, apenas project fará

cd 'readlink project'

Se você visitar esta pasta com freqüência, poderá escrever uma função de uma linha para ela no bash:

function cdproject
{
    cd 'readlink home/user/Desktop/project';
}
    
por 09.04.2018 / 14:26