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ä
-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.
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 mukaantarget
on ensimmäinen argumentti (jossa linkki osoittaa – ), kun taas toinen argumentti kutsutaan yksinkertaisesti nimellälink
(source
ei mainita).target
ja toisenlink
( man7.org/ linux / man-pages / man1 / ln.1.html ). Mutta BSD: ssä (mukaan lukien OS X) ensimmäistä kutsutaansource
ja toistatarget
( freebsd.org/cgi/man.cgi?ln ). Melko hämmentävä.