Ripristina la funzionalità "cd .." dopo aver seguito un collegamento simbolico


13

Se creo un collegamento simbolico nel terminale con un comando simile

ln -s /path/to/some/directory symbolicLink

e quindi seguire il collegamento con

cd symbolicLink

il terminale sembra pensare che il CWD sia ~/symbolicLink/anche se effettivamente sta mostrando ~/path/to/some/directory/(supponendo che il collegamento sia stato creato ~, ovviamente). Ciò significa che se poi scrivo cd ..sono riportato a ~, perché il terminale "pensa" questo è il genitore del CWD.

Cosa avrei bisogno di cambiare in modo tale che cd ..mi avrebbe portato ~/path/to/some/, cioè il vero genitore di ~/path/to/some/directory/?

Risposte:



5

C'è un sottile avvertimento nel cd -Pcomportamento (pubblicato come risposta a causa della lunghezza):

$ dir1=$(mktemp --directory)
$ dir2=$(mktemp --directory)
$ ln -s -- "$dir1" /tmp/start
$ ln -s -- "$dir2" "$dir1"
$ cd "/tmp/start/"*
$ cd -P ..

Cosa dovrebbe pwdstampare ora? Logicamente, potrebbe essere uno dei due

  1. $dir1, se lo cd -P ..fa cd ..prima e cd -- "$(readlink -f)"dopo, oppure
  2. /tmp, se lo cd -P ..fa cd -- "$(readlink -f)"prima e cd ..dopo.

In realtà lo fa il secondo, il che significa che pwdè intuitivamente due livelli superiore alla directory "padre".


1
Grazie! cd -Prisolve ancora il problema che stavo affrontando, ma è ancora utile sapere.
Val


2

Sento il tuo dolore: considero bashsostanzialmente rotto per uso interattivo a causa di questo comportamento.

tcshè una shell molto più user-friendly per l'uso interattivo. Parti bashper la programmazione (se insisti a scrivere script di shell quando ci sono alternative molto migliori tra i molti linguaggi di scripting).

Per cambiare shell per qualsiasi utente, digitare chshdalla riga di comando e seguire le istruzioni (di nuovo, raccomando /bin/tcshe l'eccellente libro di O'Reilly, usando csh e tcsh , disponibile praticamente per nulla usato).


Da quando ho scritto questa risposta, ho imparato a smettere di preoccuparmi e ad amare Bash per un uso interattivo. Ma non riesco ancora a gestire il cdcomportamento predefinito per i collegamenti simbolici. Devo ricordare di inserire la set -o physicalmia .bashrco .bash_profileper ogni macchina che utilizzo.
dodgethesteamroller
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.