![Links simbólicos do Linux: como ir para o diretório apontado?](https://rvso.com/image/1558038/Links%20simb%C3%B3licos%20do%20Linux%3A%20como%20ir%20para%20o%20diret%C3%B3rio%20apontado%3F.png)
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 bash
integrados ; os entende da mesma maneira:cd
-P
-L
pwd
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
. Observe que você também pode ter um executável (ou seja, não um shell embutido) como /bin/pwd
esse que deve se comportar de maneira semelhante. No meu Kubuntu a diferença é o pwd
builtin sem nenhuma opção usa -L
enquanto /bin/pwd
por padrão usa -P
.
Você pode ajustar o comportamento padrão do cd
builtin por set -P
( cd
acts as cd -P
) e set +P
( cd
acts as cd -L
). Veja help set
para detalhes.
Responder2
Use readlink
para 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ó cd
isso.
cd `readlink /home/user/Desktop/project`
Aqui, readlink
resolve o linkname e depois passa a cd
usarsubstituição.
Se você já estiver na pasta Desktop, não há necessidade de especificar o caminho absoluto, apenas project
servirá
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`;
}