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
-r
egy GNUizmus, azaz nem POSIX, így ' nem fog működni az OP esetében, mint a szokásos OS Xln
parancs 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_file
könyvtárba kerül.ln
manpage szerint atarget
az első argumentum (ahol a link – -re mutat), míg a második argumentum egyszerűenlink
néven emlegetik (source
nem 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ó.