Which

From ICO wiki
Jump to navigationJump to search

Autor

Sven Rekkaro AK21
Sügis 2014

Sissejuhatus

which on lihtne käsk, mis võimaldab leida käsu või skripti käivitusfaili täispika tee, kui see asub ühes süsteemi või kasutaja kaustadest, mis on kirjeldatud keskkonnamuutujas $PATH. Kui kasutaja sisestab Linuxi käsureale käsu, siis kontrollib Linuxi shell $PATH keskkonnamuutujas kirjeldatud kaustadest sisestatud käsule vastava käivitusfaili olemasolu. Kui sobivat käivitusfaili ei leita, siis kuvatakse veateade "command not found," käivitusfaili olemasolu korral see käivitatakse. Analoogselt Linuxi shellile toimib ka käsklus which, mis tagastab sisestatud käsu täispika tee, kui käivitusfail leitakse või tagastab veateate kui käsule on lisatud mitte-eksisteeriv võti. Programm ei kontrolli $PATH muutujas kirjeldatud kaustades asuvaid nimelinke. Programmil on kolm tagastusväärtust:[1]

  • 0 - argumendile vastav käivitusfail leiti.
  • 1 - argumendile vastavat käivitusfaili ei leitud.
  • 2 - käsk sisestati koos vigase võtmega.

Käsu süntaks

Käsk which süntaks erineb mõningal määral, olenevalt kasutatavast Linuxi (või mõne muu Unixi-laadse) distributsioonist. Vähemate võimalustega on käsklus Debianil põhinevatel Linuxitel [1]. Keerukam on käsu süntaks teistel Unixil põhinevatel operatsioonisüsteemidel, näiteks Linuxi distributsioonil Gentoo [2]. Käsu kasutamiseks piisab tavakasutaja õigustest.

Süntaks Debianil põhinevatel Linuxitel

which [võtmed] argument

Käsu which argumendiks on programmi, skripti või käsu nimetus. Argumente võib which käsu järele sisestada mitu.

Võtmed:

-a

Prindib välja kõikide argumentide kõik leitud täispikad teed. Ilma võtmeta "-a" prinditakse ainult esimene leitud vaste. [1].

Süntaks teistel Unixi-laadsetel operatsioonisüsteemidel

which [võtmed] [--] argument

Erinevalt Debianist on kasutatavate võtmete hulk oluliselt suurem. Argumendiks on otsitava käsu, skripti või programminimi. Argumente võib olla mitu. Tulemus tagastatakse iga argumendi kohta eraldi.

--all, -a

Prindib ekraanile kõik sobivad täispikad teed, mis $PATH muutujas kirjeldatud kataloogidest leiti.

--read-alias, -i

Loeb aliased standard sisendist (stdin), tagastab sobivad vasted standard väljundile (stdout). Kasulik võti näiteks siis, kui käsu which enda jaoks on kasutusel alias: alias which=?alias | which -i?

--skip-alias

Ignoreerib võtit: --read-alias, kui see peaks olema aktiivne. Kasulik kui otsitakse algseid käivitusfaile ning samal ajal on which käsklus koos võtmega --read-alias kasutusel aliase või funktsiooni osana.

--read-functions

Kasutab shelli funktsiooni sisendite defineerimiseks standard sisendit (stdin), väljastab sobivad vasted standard väljundil (stdout). Kasulik kombinatsioon, kui kasutatakse shelli funktsiooni which käsu enda jaoks. Näiteks: which() { declare -f | which --read-functions $@ } export -f which

--skip-functions

Ignoreerib valikud --read-functions, kui see peaks olemas sisestatud. Kasulik, kui otsitakse konkreetselt normaalseid binaarfaile, samal ajal, kui on aktiivne read-functions? optsioon which funktsiooni või aliase seadistuses.

--skip-dot

Käsk ignoreerib $PATH keskkonnamuutujas kirjeldatud punktiga algavaid kaustu.

--skip-tilde

Käsk ignoreerib $PATH keskkonnamuutujas kirjeldatud kaustu, mis alavad tildega ja binaarfaile, mis asuvad HOME kataloogis.

--show-dot

Kui kaust $PATH muutujas algab punktiga ja otsitav käivitusfail asub antud kataloogis, siis väljastatakse ekraanile "./programminimi," selle asemel, et kuvada faili täispikka teed.

--show-tilde

Väljastab tilde, kui otsingutulemus asub "HOME" kataloogis. Antud valikut ignoreeritakse, kui käsk on väljakutsutud juurkasutajana.

--tty-only

Peatab valikute protsessimise, kui need ei pärine tty terminalilt.

--version,-v,-V

Väljastab standardväljundile (stdout) versiooni informatsiooni ja seejärel väljub edukalt programmitööst.

--help

Väljastab standardväljundis kasutusinformatsiooni ja seejärel väljub edukalt programmitööst. [2]

Näited

Kuna olenevalt kasutusel olevast Unixi-laadsest operatsioonisüsteemist, toon eraldi välja näited nii Debiani (keerulisem versioon which käsust) ja Gentoo (keerukam versioon)baasil.

Näited Debiani baasil

Ühe programmi käivitusfaili otsimiseks:

which fdisk

Ekraanile tagastatakse tulemus:

/sbin/fdisk

Otsingut võib teostada ka mitme programmi kohta üheaegselt:

which fdisk ifconfig make mkdir

Tulemus ekraanil:

/sbin/fdisk
/sbin/ifconfig
/usr/bin/make
/bin/mkdir

Kõikide asukohtade ekraanile kuvamiseks tuleb kasutada võtit -a:

which -a less

Tulemus:

/usr/bin/less
/bin/less

Näited Gentoo baasil

Ühe programmi otsimine:

which which

Tagastab tulemuse:

/usr/bin/which

Mitme programmi otsimine:

which man cp mkdir ifconfig

Tulemus:

/usr/bin/man
/usr/bin/cp
/usr/bin/mkdir
/sbin/ifconfig

Sarnaselt Debianile toimib ka võti -a või --all, mis tagastab kõik positiivsed otsingutulemused:

which --all nano

Tagastab tulemuse:

/usr/bin/nano
/bin/nano

Kui otsida programmi, mis ei asu keskkonnamuutujas $PATH kirjeldatud kaustades, siis tagastab käsklus erinevalt Debiani baasil süsteemidest veateate.

which minuprogramm

Tulemus:

which: no minuprogramm in (/usr/local/bin:/usr/bin:/bin:/opt/bin:/usr/i686-pc-linux-gnu/gcc-bin/4.1.1:/usr/i686-pc-linux-gnu/gcc-bin/4.1.2)

Kokkuvõte

Kasutatud kirjandus

[1] http://manpages.debian.org/cgi-bin/man.cgi?query=which&apropos=0&sektion=0&manpath=Debian+7.0+wheezy&format=html&locale=en

[2] http://unixhelp.ed.ac.uk/CGI/man-cgi?which