Crea un collegamento simbolico assoluto alla directory corrente


12

Ora sono in una directory con un percorso molto lungo. Per una visita futura più veloce, vorrei creare un link ad esso.

Provai

ln -s . ~/mylink

~/mylinkin realtà si collega a ~. Quindi posso espandermi ~nel percorso obsoleto e poi assegnarlo a ln?

Risposte:


19

Un link simbolico in realtà memorizza il percorso fornito letteralmente, come una stringa¹. Ciò significa che il tuo link ~/mylinkcontiene " ." (un carattere). Quando accedi al collegamento, quel percorso viene interpretato in relazione alla posizione del collegamento, anziché a dove ti trovavi quando hai creato il collegamento.

Invece, è possibile memorizzare il percorso effettivo desiderato nel collegamento:

ln -s "$(pwd)" ~/mylink

utilizzando la sostituzione dei comandi per inserire l'output di pwd(il nome della directory di lavoro) nella riga di comando. lnvede il percorso completo e lo memorizza nel tuo link simbolico, che indicherà quindi il posto giusto.

¹ Più o meno.


2
Vedi anche "$PWD"in shell POSIX e ~0in zsh.
Stéphane Chazelas,

7

Dovresti usare:

ln -s "$(cd . && pwd)" ~/mylink

o:

ln -s "$(pwd -P)" ~/mylink

per ottenere il risultato giusto per la directory di lavoro corrente. Può essere cambiato mentre ci lavoravi come in questa domanda .


1
Il primo non aiuterà necessariamente in tutte le shell (vedi questa risposta ). L'OP probabilmente vuole usare $PWD(il percorso che ha usato per arrivarci), piuttosto che $(pwd -P)(il percorso canonico alla directory corrente). Se $PWDnon punta più alla directory corrente, non si può dire che lo $(pwd -P)farà neanche nel prossimo minuto.
Stéphane Chazelas,

@ StéphaneChazelas: vedi questo unix.stackexchange.com/questions/147693/…
cuonglm

@ StéphaneChazelas: puoi vedere "$PWD"avere ancora il vecchio valore se la directory corrente viene spostata. PWDimpostato solo quando cdo inizializzato dalla shell.
cuonglm

Ma quello che sto dicendo è che è probabile che l'OP voglia il vecchio $ PWD rispetto a un percorso assoluto alla directory di lavoro corrente e che in diverse shell (ksh93, ash, yash), come spiegato lì,cd non è garantito che la chiamata $ PWD o l'output di pwd un percorso alla directory corrente. Stai cercando di proteggerti da qualcosa che non è probabile che accada, ma nella prima soluzione, non è necessariamente efficace, e nella seconda, sta cambiando il comportamento.
Stéphane Chazelas,

1
Se qualcuno fa il mv dopo che fai ln, allora si finisce nella stessa situazione. D'altra parte, se lo ha fatto cd /long/logical/path/to/some/directory, non si desidera che il collegamento punti /vg0/lv1/user2/app4(il percorso canonico) in quanto il collegamento punterà al posto sbagliato quando /long/logical/path/to/some/directorypunta verso un altro luogo.
Stéphane Chazelas,
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.