ln -s, joiden polku on suhteessa pwd

Yritän luoda joukon symbolisia linkkejä, mutta en voi selvittää miksi tämä toimii

ln -s /Users/niels/something/foo ~/bin/foo_link 

kun tämä

cd /Users/niels/something ln -s foo ~/bin/foo_link 

ei ole.

Uskon, että sillä on jotain tekemistä sen kanssa, että foo_link linkitetään foo-kansioon /Users/niels/bin -kentässä /Users/niels/something

Kysymys kuuluu, miten voin luoda symbolisen linkin, joka osoittaa absoluuttisen polun kirjoittamatta sitä itse?

Käytän viitteenä Mac OS X 10.9: tä ja Zsh: ää .

Vastaus

Helpoin tapa linkittää nykyiseen hakemistoon absoluuttisena polkuna kirjoittamatta koko polkujonoa olisi

ln -s "$(pwd)/foo" ~/bin/foo_link 

target (ensimmäinen)-argumentti ln -s komento toimii suhteessa symbolisen linkin sijaintiin, ei nykyiseen hakemistoon. Se auttaa tietämään, että lähinnä luominen ed symlink (toinen argumentti) sisältää yksinkertaisesti ensimmäiselle argumentille antamasi tekstin .

Jos siis teet seuraavat toimet:

cd some_directory ln -s foo foo_link 

ja siirrä sitten linkki ympärille

mv foo_link ../some_other_directory ls -l ../some_other_directory 

näet, että foo_link yrittää osoittaa foo hakemistoon, jossa se asuu. Tämä toimii myös symbolisten linkkien avulla, jotka osoittavat suhteellisia polkuja. Jos teet seuraavaa:

ln -s ../foo yet_another_link 

ja siirrä sitten yet_another_link toiseen hakemistoon ja tarkista, mihin se osoittaa, huomaat, että se osoittaa aina kohtaan ../foo. Tämä on tarkoitettua käyttäytymistä, koska monta kertaa symboliset linkit voivat olla osa hakemistorakennetta, joka voi sijaita eri absoluuttisilla poluilla.

Kun luot linkin kirjoittamalla,

ln -s foo ~/bin/foo_link 

foo_link pitää vain linkki osoitteeseen foo suhteessa sijaintiin. Kun $(pwd) asetetaan kohde-argumentin eteen, nimi lisää vain nykyisen työkansion ”s absoluuttinen polku, joten linkki luodaan absoluuttisella kohteella.

Kommentit

  • " … auttaa kuvittelemaan , että luotu symboli vain pitää tekstiä … " Isn ' onko tämä kirjaimellinen totuus?
  • Se on. Ehkä voisin vaihtaa kuvitella arvoksi " know " tai " ymmärtää ".
  • Ehkä olen hämmentynyt (taas). Näyttää siltä, missä sanot " kohde " tarkoitat " lähde ". source_file (ensimmäinen) -argumentti on linkin kohta, johon linkki osoittaa, mikä on sanatarkasti komentoon kirjoittamasi. target_file (toinen) -argumentista tulee linkin nimi, ellei kirjoittamasi ole hakemisto, jolloin linkin nimi on sama kuin source_file, mutta sijoitetaan hakemistoon target_file.
  • Y̶o̶u̶ ' ̶r̶e̶ ̶r̶i̶g̶h̶t̶, ̶ ̶t̶h̶e̶r̶e ' S virheestä ̶a̶n̶s̶w̶e̶r̶.̶ hullu, miten se ei tehnyt ' T takertua ̶s̶o̶o̶n̶e̶r̶.̶ ̶F̶i̶x̶i̶n̶g̶.̶ Ei, vastaus oli oikein. ln -sivun mukaan target on ensimmäinen argumentti (jossa linkki osoittaa ), kun taas toinen argumentti kutsutaan yksinkertaisesti nimellä link (source ei mainita).
  • Linuxissa (gnu ln) man-sivu kutsuu ensimmäisen argumentin target ja toisen link ( man7.org/ linux / man-pages / man1 / ln.1.html ). Mutta BSD: ssä (mukaan lukien OS X) ensimmäistä kutsutaan source ja toista target ( freebsd.org/cgi/man.cgi?ln ). Melko hämmentävä.

Vastaa

-r (--relative) -lippu saa tämän toimimaan:

ln -sr foo ~/bin/foo_link 

kommentit

  • Varo, että -r on GNUism, eli muu kuin POSIX, joten se ei voinut ' toimia OP-tapauksessa vakio-OS X: nä ln -komento on BSD-pohjainen.

Vastaa

Jotkut tallennetaan kirjoittamalla voit tehdä

ln -s "$PWD"/foo ~/bin/foo_link 

kommentteja

  • @Freddy, se riippuu kuoresta. Kaloissa tai zsh: ssä se olisi OK.Bournen kaltaisissa kuorissa, joissa on bash ja joiden oletusarvo on $ IFS, SPC olisi todellakin ongelma, mutta myös TAB, NL ja kaikki huojuvat merkit (ainakin *, ? ja [...]).
  • @St é phaneChazelas Kyllä, sinä ' on oikeassa ja kysymys on merkitty tunnisteella bash, joten se ' sa yleensä hyvä idea lainata sitä. Paha, minun olisi pitänyt olla tarkempi.

Vastaus

Entä:

 $ cd /Users/niels/something $ ln -s ./foo ~/bin/foo_link 

Kommentit

  • Ei, ei ' tee temppua.

Vastaa

Sähköpostiosoitettasi ei julkaista. Pakolliset kentät on merkitty *