Risoluzione dei collegamenti simbolici (pwd)


32

Di 'che faccio quanto segue:

cd /some/path
ln -s /target/path symbolic_name

Se quindi fai:

cd /some/path
cd symbolic_name
pwd

Ottengo:

/some/path/symblic_name

e non:

/target/path

Esiste un modo per fare in modo che la shell "risolva completamente" un collegamento simbolico (ovvero l'aggiornamento di CWD, ecc.), Come se avessi fatto direttamente:

cd /target/path

?

Ho bisogno di eseguire alcuni programmi che sembrano "consapevoli" o "sensibili" su come arrivo al mio percorso target e vorrei che pensassero di essere arrivato al percorso target come se lo avessi fatto cd /target/pathdirettamente.


7
In relazione a questa domanda . Puoi fare pwd -Po alias pwd='pwd -P'anche cd -Pandare al percorso fisico invece del collegamento simbolico.
Martín Canaval,

@ MartínCanaval Grazie; questo è quello che stavo cercando!
Ryan,

Risposte:


35

La tua shell ha un builtin pwd, che cerca di essere "intelligente". Dopo aver eseguito un cdcollegamento simbolico, l'interno pwdfalsa l'output come se si passasse a una directory reale.

Passare l' -Popzione a pwd, ovvero eseguire pwd -P. L' -Popzione (per "fisico") dice di pwdnon eseguire alcun tracciamento simbolico dei collegamenti e di visualizzare il percorso "reale" della directory.

In alternativa, dovrebbe esserci anche un vero binario pwd, che non fa (e non è nemmeno in grado di fare) questo tipo di magia. Usa questa esplicita binaria:

$ type -a pwd
pwd is a shell builtin
pwd is /bin/pwd
$ mkdir a
$ ln -s a b
$ cd b
$ pwd
/home/michas/b
$ /bin/pwd
/home/michas/a

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.