ln -s a pwd

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

  • " … segít elképzelni , hogy a létrehozott szimbólum csak szöveget tartalmaz … " Isn ' ez a szó szerinti igazság?
  • Az. Talán meg tudnám változtatni a képzelet értéket " know " vagy " megérteni ".
  • Talán (ismét) összezavarodtam. Úgy tűnik, ahol azt mondja, hogy " target ", akkor " forrás ". A source_file (első) argumentum a hivatkozás pontjára mutat, amely szó szerint pontosan azt adja, amit a parancsba beír. A target_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 a target_file könyvtárba kerül.
  • Y̶o̶u̶ ' ̶r̶e̶ ̶r̶i̶g̶h̶t̶, ̶ ̶t̶h̶e̶r̶e ' s valami hiba a ̶a̶n̶s̶w̶e̶r̶.̶ őrült hogyan didn ' t elkapnak ̶s̶o̶o̶n̶e̶r̶.̶ ̶F̶i̶x̶i̶n̶g̶.̶ Nem, a válasz az volt, jobb. A ln manpage szerint a target az első argumentum (ahol a link -re mutat), míg a második argumentum egyszerűen link néven emlegetik (source nem szerepel).
  • A linuxban (gnu ln) a a man oldal meghívja az első argumentumot target és a második link ( man7.org/ linux / man-pages / man1 / ln.1.html ). De a BSD-ben (beleértve az OS X-et is) az elsőt source -nek, a másodikat pedig target ( freebsd.org/cgi/man.cgi?ln ). Elég zavaró.

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 X ln 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.

Vélemény, hozzászólás?

Az email címet nem tesszük közzé. A kötelező mezőket * karakterrel jelöltük