Criei um link flexível ( ln -s 1 2
) para um diretório que está dentro do test
diretório, abri o link flexível ( cd 2
) e exibi o caminho atual usando pwd
. O caminho exibido era ~/test/2
e não ~/test/1
.
É diferente em um sistema operacional como o Windows, o atalho nos leva ao diretório real. Estou um pouco confuso sobre como esse link não funciona no Linux. Não é um atalho como em Windows
? Por que o caminho não é ~/test/1
?
$ mkdir test
$ cd test
$ mkdir 1
$ ln -s 1 2
$ cd 2
$ pwd
/home/dazz/test/2
shell
symlink
cd-command
DScript
fonte
fonte
Respostas:
Essa é uma característica do shell que lembra como você chegou aonde está.
Se você
realpath
instalou, você pode:E falta isso se você tiver python:
ou readlink (de coreutils):
ou
/bin/pwd
(não o shell internopwd
):fonte
ls -l /proc/$$/cwd
tira proveito da/proc
interface do sistema de arquivos do kernel .pwd -P
para imprimir o caminho físico, em vez de lógico, para o diretório atual.Contraste
pwd
e/bin/pwd
.pwd
, que é um comando interno em muitos shells, informa onde seu shell pensa que você está (e, portanto, trata os links simbólicos "links suaves" como se fossem diretórios reais./bin/pwd
é um programa externo que indica onde você realmente está, se necessário, percorrendo a árvore do sistema de arquivos até/
. Ele não leva em consideração os links simbólicos, porque eles não existem quando se move para cima..
fonte
Outras respostas cobriram
/bin/pwd
vs do shellbuiltin pwd
.Se você deseja seguir os links simbólicos no estilo Windows mencionado, use
cd -P
: ele alterará a variável PWD de acordo.Se você deseja usar
-P
por padrão, pode adicionar esta linha ao seu.bashrc
ou.zshrc
:Outras conchas podem variar.
fonte