Quando eseguo il cd tramite un collegamento simbolico, perché pwd mostra il collegamento simbolico anziché il percorso reale?


19

Ho creato un collegamento software ( ln -s 1 2) a una directory che si trova all'interno della testdirectory e ho aperto il collegamento software ( cd 2) e ho visualizzato il percorso corrente utilizzando pwd. Il percorso visualizzato era ~/test/2e non ~/test/1.

È diverso in un sistema operativo come Windows, il collegamento ci porta alla directory reale. Sono un po 'confuso su come funziona questo soft link in Linux. Non è una scorciatoia come in Windows? Perché il percorso non lo è ~/test/1?

 $ mkdir test
 $ cd test
 $ mkdir 1
 $ ln -s 1 2
 $ cd 2
 $ pwd
 /home/dazz/test/2

2
Grazie per aver rimosso lo screenshot. La prossima volta, modifica la domanda invece di eliminare e ripubblicare. L'eliminazione di troppe domande può essere vietato. Tale divieto è automatico, quindi non saremo in grado di fare molto al riguardo. In ogni caso, non è necessario ripubblicare dal momento che la modifica non risponde alla domanda .
terdon

Perché me lo chiedi due volte? askubuntu.com/q/610133/367165
AB

AB stesso forum?
DScript,

Risposte:


18

Questa è una caratteristica della shell che ricorda come sei arrivato a dove sei.
Se hai realpathinstallato puoi fare:

$ realpath 
/home/dazz/test/1

E manco che se hai Python:

$ python -c "import os; print(os.path.realpath('.'))"
/home/dazz/test/1

o readlink (da coreutils):

$ readlink -f .
/home/dazz/test/1

oppure /bin/pwd(non la shell integrata pwd):

$ /bin/pwd
/home/dazz/test/1

ls -l /proc/$$/cwdsfrutta l' /procinterfaccia del filesystem del kernel .
Bruce Ediger,

8
Nota anche pwd -Pper stampare il percorso fisico, anziché logico, della directory corrente.
godlygeek,

8

Contrasto pwde /bin/pwd.

pwd, che è un comando integrato in molte shell, ti dice dove la tua shell pensa di essere (e quindi tratta i symlink "soft link" come se fossero vere directory.

/bin/pwdè un programma esterno che ti dice dove sei veramente, se necessario attraversando l'albero dei filesystem fino a /. Non tiene conto dei collegamenti simbolici perché non esistono quando si attraversa il passaggio verso l'alto..


6

Altre risposte hanno riguardato /bin/pwdla shell builtin pwd.

Se vuoi seguire i collegamenti simbolici nello stile di Windows che hai citato, usa cd -P: cambierà la variabile PWD di conseguenza.

Se si desidera utilizzare -Pper impostazione predefinita, è possibile aggiungere questa riga a .bashrco .zshrc:

set -P

Altre conchiglie possono variare.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.