Sto cercando di creare un mucchio di collegamenti simbolici, ma non riesco a capire perché funziona
ln -s /Users/niels/something/foo ~/bin/foo_link mentre questo
cd /Users/niels/something ln -s foo ~/bin/foo_link non lo è.
 Credo abbia qualcosa a che fare con il foo_link collegamento a foo in /Users/niels/bin anziché in /Users/niels/something 
Quindi la domanda è: come faccio a creare un collegamento simbolico che punta a un percorso assoluto, senza effettivamente digitarlo?
Come riferimento, sto usando Mac OS X 10.9 e Zsh .
Risposta
Il modo più semplice per collegarsi alla directory corrente come percorso assoluto, senza digitare lintera stringa del percorso sarebbe
ln -s "$(pwd)/foo" ~/bin/foo_link  Il target (primo) argomento per il ln -s Il comando funziona in relazione alla posizione del collegamento simbolico, non alla directory corrente. Aiuta a sapere che, essenzialmente, il file creat ed symlink (il secondo argomento) contiene semplicemente il  testo  fornito per il primo argomento. 
Pertanto, se fai quanto segue:
cd some_directory ln -s foo foo_link e poi sposta il link
mv foo_link ../some_other_directory ls -l ../some_other_directory  vedrai che foo_link  cerca  di puntare a foo nella directory in cui risiede. Funziona anche con collegamenti simbolici che puntano a percorsi relativi. Se esegui le seguenti operazioni: 
ln -s ../foo yet_another_link , quindi sposta yet_another_link in unaltra directory e controlla dove punta, vedrai che punta sempre a ../foo. Questo è il comportamento previsto, poiché molte volte i collegamenti simbolici potrebbero far parte di una struttura di directory che può risiedere in vari percorsi assoluti. 
Nel tuo caso, quando crei il collegamento digitando
ln -s foo ~/bin/foo_link  foo_link contiene solo un link a foo, relativo alla sua posizione. Mettendo $(pwd) davanti allargomento di destinazione “s name si aggiunge semplicemente la directory di lavoro corrente” s percorso assoluto, in modo che il collegamento venga creato con un obiettivo assoluto. 
Commenti
Rispondi
 Utilizzando -r (--relative) farà funzionare questo: 
ln -sr foo ~/bin/foo_link Commenti
-  Attenzione che -rè uno GNUismo, cioè non POSIX, quindi ' non funzionerà nel caso OP come OS X standardlnè basato su BSD.
Rispondi
Per salvare alcuni digitando, puoi fare
ln -s "$PWD"/foo ~/bin/foo_link Commenti
-  @Freddy, dipende dalla shell. In fish o zsh, andrebbe bene.Nelle shell simili a Bourne che includono bash e con il valore predefinito di $ IFS, SPC sarebbe effettivamente un problema, ma anche TAB, NL e tutti i caratteri globbing (almeno *,?e[...]).
-  @St é phaneChazelas Sì, tu ' ha ragione e la domanda è contrassegnata con bash, quindi ' è generalmente un buona idea citarlo. Colpa mia, avrei dovuto essere più specifico.
Risposta
Che ne dici:
 $ cd /Users/niels/something $ ln -s ./foo ~/bin/foo_link Commenti
- No, ' non funziona.
source_file(primo) è dove punta il collegamento, che è alla lettera ciò che inserisci nel comando. Largomentotarget_file(secondo) diventa il nome del collegamento a meno che ciò che inserisci non sia una directory, nel qual caso il nome del collegamento è lo stesso del nome di base delsource_filema posizionato nella directorytarget_file.lnmanpage,targetè il primo argomento (dove il collegamento punta a ) mentre il secondo argomento è semplicemente indicato comelink(sourcenon è menzionato).targete il secondolink( man7.org/ linux / man-pages / man1 / ln.1.html ). Ma in BSD (incluso OS X) il primo si chiamasourcee il secondotarget( freebsd.org/cgi/man.cgi?ln ). Abbastanza confuso.