Ákvað að taka aðeins saman þessa uppsetningu ef einhver getur nýtt sér.
Athugið að þetta nær aðeins yfir MacOS og Linux því miður en sama aðferð er notuð á Windows en ég hef ekki hugmynd um hvar hlutirnir þar eru staðsettir.
Orðið forrit í eftirfarandi samhengi á við kóða sem hefur verið þýddur(compile-aður) í keyranlega skrá. Orðið skel verður notað sem samheiti yfir allar helstu tegundir skelja sem eru í notkun (sh, bash, zsh, o.s.f.v.)
Keyranleg forrit í skelinni geta verið staðsett í hinum og þessum möppum. Þegar heiti á keyranlegri skrá er sleginn inn í skelinni þá þarf skráin að vera til staðar í möppunni sem heitið er slegið inn. Skelin reynir ekki að leita að skrá með þessu heiti á allri vélinni.
En það væri frekar glatað að þurfa að vita nákvæmlega hvar öll forrit væru staðsett og þurfa svo að auki að cd-a sig inn í möppuna þar sem forritið væri til að keyra það.
Til að leysa þetta vandamál þá er slóðum að möppum sem innihalda keyranleg forrit safnað saman í einn langan streng og : notaður til að aðskilja slóðirnar.
Dæmi:
/home/levy/.cargo/bin:/home/levy/.pyenv/bin:/home/levy/.yarn/bin:/home/levy/.poetry/bin:/home/levy/.nvm/versions/node/v14.0.0/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:/usr/local/go/bin:/usr/local/go/binÍ hverri möppu í þessum langa streng eru eitt eða fleiri forrit sem hægt er að keyra með því að slá inn heitið á skránni sjálfri.
Skel er ekkert annað en forritunarumhverfi, þ.e. þið getið búið til breytur, for lykkjur og fleira í sh (eða bash) málinu. Í hvert sinn sem þið opnið skel þá fáiði gefins allskyns umhverfisbreytur (environment variables) sem skelin notar til að auðvelda sér lífið.
Ef þið opnið skel og skrifið env þá sjáiði haug af breytum sem innihalda allskyns stillingar fyrir skelina. Ein af þessum breytum er PATH (vísað í hana með $PATH). Eins og kom fram ofar þá leitar skelin fyrst í möppunni sem þú ert staðsett/ur í þegar þú slærð inn heiti á forriti til að keyra. Ef skráin finnst ekki í möppunni þá er athugað í allar möppurnar sem eru í $PATH strengnum. Þannig má keyra öll forrit sem eru uppsett á vélinni hvar sem þú ert í skráartrénu svo lengi sem full slóð að möppunni sem skráin er í sé í $PATH strengnum.
Dæmi: Þið eruð líklega með annaðhvort Firefox eða Chrome á vélinni ykkar og þau má keyra beint úr skelinni eins og önnur forrit með því að slá inn heitið á keyranlegu skránum.
Getið byrjað að kanna hvar í skráartrénu þau eru:
which google-chrome
# eða
which firefox
# prentar út /usr/bin/firefoxFirefox á minni vél er í möppunni /usr/bin og ef ég skoða $PATH breytuna hérna að ofan þá er mappan þar. Ég veit því að skelinn getur keyrt þessa skrá hvar sem ég er skráartrénu. Ég þarf ekki að fara inn í möppuna fyrst.
# óþarfi því þessi mappa er í $PATH
cd /usr/binÞið getið svo prófað að keyra þetta beint úr skelinni:
google-chromeeða
firefoxOk, þá er það $CLASSPATH sem er líka umhverfisbreyta en þarf að vera til staðar sérstaklega fyrir java. Java veit slóðina að öllum standard klösum sem koma með uppsetningunni og við höfum verið að nota t.d. System í System.out.print('foo'). Ef við ætlum að bæta við pökkum sem fylgja ekki með í uppsetningunni og innihalda klasa sem við viljum nota, t.d. StdDraw, þá þarf að segja Java hver slóðin að þeim er. Það má gera með því að setja slóðina í $CLASSPATH umhverfisbreytuna eða setja slóðina sem option -cp (classpath) þegar t.d. Ugla.java er keyrð.
Sem dæmi þá myndi ég keyra skránna svona á minni vél:
java -cp /home/levy/code/java/libs/algs4.jar ~/Dropbox/hi/2021/vor/TOL203G/skilaverkefni/java/src/Ugla.javaEða stytta mér leið með því að nota tildu ~ sem er flýtileið að hæmasvæðinu mínu /home/levy
java -cp ~/code/java/libs/algs4.jar ~/Dropbox/hi/2021/vor/TOL203G/skilaverkefni/java/src/Ugla.javaVið getum breytt og bætt við umhverfisbreytum eins og við viljum, rétt eins og við gerum í klösum og föllum sem við skrifum.
Ef t.d. $CLASSPATH finnst ekki í skeljarumhverfinu þá myndi ég skilgreina breytuna og gefa henni slóðina að algs4.jar skránni sem gildi:
export CLASSPATH=~/code/java/libs/algs4.jarAthugum hvort hún sé kominn inn:
envHún ætti að birtast þarna í hrúgunni einhverstaðar.
Getum líka athugað hvort einhver tiltekin breyta sé til staðar:
echo $CLASSPATHVið ættum að fá útprentað gildið á henni.
Svona má setja hvað sem er sem umhverfisbreytu. Ég gæti t.d. set slóð á skilaverkefnamöppuna í TÖL sem umhverfisbreytu:
export TOL=~/Dropbox/hi/2021/vor/TOL203G/skilaverkefniOg nýtt mér svo hana til að drífa mig inn í möppuna án þess að skrifa þessa löngu slóð:
cd $TOLEn það eru betri leiðir til að gera þetta heldur en með breytum.
Stundum þarf líka að bæta við slóð í breytu sem er nú þegar til, t.d. $PATH, því við viljum ekki stúta henni með nýju gildi, t.d. ef ég væri með keyranlegt forrit á einhverjum fönkí stað.
Gætum t.d. búið til breytu og gefið $PATH nýtt gildi sem væri upprunalega gildið : viðbótargildið.
TOL=~/Dropbox/hi/2021/vor/TOL203G/skilaverkefni
export PATH=$PATH:$TOLÞegar við setjum umhverfisbreytu í skelina með þessum hætti þá lifir hún eingöngu eins lengi og skelin lifir, þ.e. hún hverfur ef þú lokar skelinni og hún verður aldrei til ef þú opnar nýja skel. Til að festa hana í öllum skeljum sem opnaðar eru þá þarf að setja hana í skrá sem er hlaðinn inn í hvert skipti sem ný skel er opnuð. Þessi skrá heitir misjöfnum nöfnum og oft eru þær nokkrar sem eru hlaðnar inn, þ.e. ein skrá importar annari.
Á Linux er það yfirleitt skráin .bash_profile eða .bashrc sem eru í heimamöppunni, þ.e. ~/.bash_profile en á MacOS þá gæti hún heitið eitthvað annað, ~/.zshrc mögulega þar sem Apple gerði zsh að default skel í síðustu útgáfu, en ég veit það ekki.
Næst þegar skel er opnuð þá verða umhverfisbreyturnar aðgengilegar. Það má einnig keyra source skipunina sem tekur skrá sem argument, og keyrir innihald skráarinnar. Þar sem export er skipun sem tekur umverfisbreytu sem argument þá er línan export CLASSPATH=~/code/java/libs/algs4.jar í skránni ~/.bashrc ekkert annað en skipun sem er keyrð þegar skipunin source .bashrc er keyrð.