elérési útjával, megpróbálok létrehozni egy csomó szimbolikus linket, de nem tudom kitalálni, hogy ez miért működik
ln -s /Users/niels/something/foo ~/bin/foo_link
míg ez
cd /Users/niels/something ln -s foo ~/bin/foo_link
nem az.
Úgy gondolom, hogy köze van ahhoz, hogy a /Users/niels/something helyett foo_link a foo-hoz kapcsolódik az /Users/niels/bin -ben.
Tehát az a kérdés, hogyan hozhatok létre egy abszolút elérési útra mutató szimbolikus linket, anélkül, hogy azt ténylegesen beírnám?
Hivatkozásképpen a Mac OS X 10.9 és a Zsh rendszert használom .
Válasz
A legegyszerűbb módja az aktuális könyvtárhoz abszolút elérési útként való hivatkozás, az egész elérési út beírása nélkül:
ln -s "$(pwd)/foo" ~/bin/foo_link
A target (első) argumentum a ln -s A parancs a szimbolikus link helyéhez viszonyítva működik, nem pedig az aktuális könyvtárhoz. Ez segít megismerni, hogy lényegében a creat Az ed symlink (a második argumentum) egyszerűen tartalmazza az első argumentumhoz megadott szöveget .
Ezért, ha a következőket teszi:
cd some_directory ln -s foo foo_link
, majd helyezze át a linket
mv foo_link ../some_other_directory ls -l ../some_other_directory
látni fogja, hogy foo_link megpróbálja a foo pontra mutatni abban a könyvtárban, amelyben tartózkodik. Ez a relatív utakra mutató szimbolikus linkekkel is működik. Ha a következőket teszi:
ln -s ../foo yet_another_link
, majd helyezze át yet_another_link egy másik könyvtárba, és ellenőrizze, hova mutat, Látni fogja, hogy mindig a ../foo -re mutat. Ez a szándékolt viselkedés, mivel sokszor a szimbolikus linkek egy olyan könyvtárstruktúra részét képezhetik, amely különféle abszolút utakon tartózkodhat.
Az Ön esetében, amikor a hivatkozás begépelésével hozza létre
ln -s foo ~/bin/foo_link
foo_link csak egy link a foo -hez, a helyéhez viszonyítva. Ha a $(pwd) elemet a cél argumentum elé helyezi, akkor a név egyszerűen hozzáadja az aktuális munkakönyvtárat abszolút elérési út, így a link abszolút célzattal jön létre.
Megjegyzések
Válasz
A -r (--relative) zászlóval működni fog:
ln -sr foo ~/bin/foo_link
Megjegyzések
- Vigyázzon, hogy a
-regy GNUizmus, azaz nem POSIX, így ' nem fog működni az OP esetében, mint a szokásos OS Xlnparancs BSD alapú.
Válasz
Néhány mentése gépeléssel megteheti
ln -s "$PWD"/foo ~/bin/foo_link
Megjegyzések
- @Freddy, ez a héjatól függ. Halban vagy zsh-ben rendben lenne.Bourne-szerű héjakban, beleértve a bash-t és az alapértelmezett $ IFS értékkel, az SPC valóban problémát jelent, de a TAB, az NL és az összes globbing karakter is (legalább
*,?és[...]). - @St é phaneChazelas Igen, te ' igaza van, és a kérdést a következő címkével látja el:
bash, tehát ' általában a jó ötlet idézni. Rossz, konkrétabbnak kellett volna lennem.
Válasz
Mit szólna ehhez:
$ cd /Users/niels/something $ ln -s ./foo ~/bin/foo_link
Megjegyzések
- Nem, nem teszik ' ezt a trükköt.
source_file(első) argumentum a hivatkozás pontjára mutat, amely szó szerint pontosan azt adja, amit a parancsba beír. Atarget_file(második) argumentum a hivatkozás nevévé válik, kivéve, ha a beírt fájl könyvtár, ebben az esetben a hivatkozás neve megegyezik a , de atarget_filekönyvtárba kerül.lnmanpage szerint atargetaz első argumentum (ahol a link – -re mutat), míg a második argumentum egyszerűenlinknéven emlegetik (sourcenem szerepel).targetés a másodiklink( man7.org/ linux / man-pages / man1 / ln.1.html ). De a BSD-ben (beleértve az OS X-et is) az elsőtsource-nek, a másodikat pedigtarget( freebsd.org/cgi/man.cgi?ln ). Elég zavaró.