Teinpähän linuxissa shelliskriptin, jotakuinkin tähän tyyliin:
kansio=/joku/kansio ln -s ${kansio}/foo/* /jokutoinen/foo/
No, tämähän toimii mainiosti. Ongelmat alkavat, kun kansio
ksi asettaa sellaisen hakemiston, jossa on välilyönti, esim. "/program files/jee"
. ln -komento ei kuitenkaan koskaan saa tuosta kansio-muuttujasta muuta kuin alkupään ensimmäiseen välilyöntiin asti. Olen yrittänyt kaikenlaista, yritin laittaa tietysti hipsut ympärille tyyliin
ln -s "${kansio}/foo/*" /jokutoinen/foo/
, vaan tuostapa ei ln-komento tykännyt, ja teki yhden tiedoston nimeltä *, vaikka piti linkata monta tiedostoa.
Komentoriviltä toimii tuo linkkaus komennolla
ln -s /program\ files/jee/foo/* /jokutoinen/foo
, joten yritin myös kenoviivoitella välilyöntiä tuossa kansio-muuttujassa, vaan eipähän sekään toiminut.
Mitä olen jättänyt huomioimatta/missä vika/miten asian saa korjattua?
Bashin tabcomplete kertoo että laittamalla
\
-merkin välilyönnin eteen, homma pelittää.
Esim:
ls .wine/drive_c/Program\ Files/mozilla.org/
Niin, siis suoraan komentoriville kirjoittamalla tuo \<välilyönti>
-juttu toimii, vaan jos kierrättää muuttujan kautta, niin ei. Jos siis laitan
kansio="/program\ files/jee"
, ei homma pelitä. Muuttujasta käytetään vain osuus välilyöntiin asti, kenoviiva mukaanlukien, vaan ei enempää.
bash-3.1$ kansio="/program\ files/jee" bash-3.1$ echo $kansio /program\ files/jee bash-3.1$ cd $kansio bash: cd: /program\: No such file or directory bash-3.1$ cd /program\ files/jee bash: cd: /program files/jee: No such file or directory bash-3.1$
Tuon lainausmerkin paikkaa voi siirtää:
ln -s "${kansio}/foo"/* /jokutoinen/foo/
Aivan, kas kun en tullut ajatelleeksi. Kiitoksia :)
Krisse7 kirjoitti:
kansio="/program\ files/jee"
Hakemiston nimen kirjoittaminen lainausmerkkeihin ja merkin kirjoittaminen kenonviivan avulla ovat tässä tapauksessa toisensa poissulkevia.
Aihe on jo aika vanha, joten et voi enää vastata siihen.