BASH - juttuja

Mitäpä ajattelisit tästä kun yritän käynnistää ohjelman:

bash: /usr/local/bin/fileage: Tiedostoa tai hakemistoa ei ole

-rwxr-xr-x 1 root root 4414 marra 10 20:13 /usr/bin/fileage

/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games

/usr/bin/fileage

Siis mitä ? Ohjelma ei käynnisty vaikka on polussa, löytyy aivan oikeasta kansiosta ja myös “which” komento löytää sen oikeasta paikasta. Sen sijaan BASH kuvittelee että ohjelma sijaitsisi jossain aivan muualla ja sanoo sen takia “ei oo” kun yrittää käynnistää ohjelmaa.

Nyt tuleekin mielenkiintoinen juttu:

fileage on hajautettu (/usr/local/bin/fileage)

Hajautettu ??? (hash ?)

Google-haku löysi heti:

http://www.turnkeylinux.org/forum/support/20140108/solved-bash-command-not-found-after-replacing-package

Eli karkeasti suomennettuna: “BASH ei välttämättä käytä polkua ollenkaan jos se löytää sen omasta “pikahakutaulusta” käynnistettävälle ohjelmalle sijainnin.”

Nyt vain oli käynyt niin että kun käynnistettävä ohjelma oli ensin paikassa /usr/local/bin ja siirsin sen paikkaan /usr/bin niin BASH ei tajunnut muutosta. Tuota voisi kutsua jopa bugiksi siinä mielessä että kun ohjelma ei löytynyt tuon “hash” -taulun avulla niin BASH ei mennyt etsimään sitä polusta (mistä se olisi löytynyt).

Oletko tutustunut BASH: in “hash” -systeemikäskyyn ? No, älä ole huolissasi sillä ei ole varmasti kauhean moni muukaan :slight_smile:
Tuolta se löytyy esimerkiksi:

http://ss64.com/bash/hash.html

Jatketaanpas koetta:

Hip hei ja käynnistyy ok.

Ja se pieni lisäopetus:

builtin hash -p /usr/bin/fileage fileage

eli tuo komentohan se olisi näyttänyt myös mistä kiikastaa.

Nimimerkki
"beware the bash hash"