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

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

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

/dir/para/projeto/

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

/home/usuário/Desktop/projeto/

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

/home/usuário/Desktop/projeto/

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

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

É possível conseguir o que desejo, ou seja, ir para o 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.

Responder1

Nos usos e switches bashintegrados ; os entende da mesma maneira:cd-P-Lpwd

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 cde help pwd. Observe que você também pode ter um executável (ou seja, não um shell embutido) como /bin/pwdesse que deve se comportar de maneira semelhante. No meu Kubuntu a diferença é o pwdbuiltin sem nenhuma opção usa -Lenquanto /bin/pwdpor padrão usa -P.

Você pode ajustar o comportamento padrão do cdbuiltin por set -P( cdacts as cd -P) e set +P( cdacts as cd -L). Veja help setpara detalhes.

Responder2

Use readlinkpara resolver o link para seu destino:

cd $(readlink thelink)

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

function cdl { local dir=$(readlink -e $1); [[ -n "$dir" ]] && cd $dir; }

Responder3

Não sei como conseguir isso 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 usarlink de leituracomando para obter o link simbólico resolvido ou o nome do arquivo canônico. Então é só cdisso.

cd `readlink /home/user/Desktop/project`

Aqui, readlinkresolve o linkname e depois passa a cdusarsubstituição.

Se você já estiver na pasta Desktop, não há necessidade de especificar o caminho absoluto, apenas projectservirá

cd `readlink project`

Se você visita esta pasta com frequência, você pode escrever uma função de uma linha para ela no bash:

function cdproject
{
    cd `readlink home/user/Desktop/project`;
}

informação relacionada