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
Vastaa
-r (--relative) -lippu saa tämän toimimaan:
ln -sr foo ~/bin/foo_link
kommentit
- Varo, että
-ron 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.
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 kuinsource_file, mutta sijoitetaan hakemistoontarget_file.ln-sivun mukaantargeton ensimmäinen argumentti (jossa linkki osoittaa – ), kun taas toinen argumentti kutsutaan yksinkertaisesti nimellälink(sourceei mainita).targetja toisenlink( man7.org/ linux / man-pages / man1 / ln.1.html ). Mutta BSD: ssä (mukaan lukien OS X) ensimmäistä kutsutaansourceja toistatarget( freebsd.org/cgi/man.cgi?ln ). Melko hämmentävä.