Lihtne veaotsing käsureal
Selles peatükis vaatame, mida kontrollida siis, kui käsk ei tööta nii nagu ootasid.
Loogika
Algajale on tihti raske aru saada, mida üldse kontrollida, kui ekraanile ilmub veateade. Väga sageli ei olegi vaja “suurt häkki”, vaid rahulikku kontrolljärjekorda.
Hea käsurea veaotsing tähendab tavaliselt:
- loe veateade lõpuni läbi
- kontrolli, kus sa parajasti oled
- kontrolli, kas käsk või fail on üldse olemas
- kontrolli õigusi
- kontrolli, kas probleem on shellis, paketis või teekonnas
Kiirspikker
pwdnäitab, kus sa oledls -lahnäitab, mis siin olemas oncommand -v käsknäitab, kas käsk on leitavecho "$SHELL"näitab praegust shellils -l failaitab vaadata õigusikäsk --helpvõiman käskaitab kinnitada õiget süntaksit
Käivita need käsud
pwd
ls -lah
command -v bash
command -v rg
echo "$SHELL"
Kui mõni skript ei käivitu, siis kontrolli nii:
ls -l skript.sh
bash skript.sh
Kontrolljärjekord
Kui käsk ei tööta, siis alusta sellest:
- mis täpselt oli käsk
- mis oli täpne veateade
- kas oled õiges kaustas
- kas fail või käsk, millele viitad, on päriselt olemas
- kas sul on vajalikud õigused
See kõlab lihtsana, aga suur osa vigu kukub just siia.
“command not found”
See tähendab tavaliselt üht neist:
- kirjutasid käsu nime valesti
- käsk ei ole paigaldatud
- käsk ei ole sinu
PATH-is
Praktilised kontrollid:
command -v rg
command -v python3
echo "$PATH"
Kui command -v ei leia midagi, siis on järgmine küsimus tavaliselt:
- kas tööriist on puudu
- või kas ta on olemas, aga sinu shell ei leia seda
“No such file or directory”
See tähendab enamasti:
- oled vales kaustas
- failinimi on vale
- kasutad vale suhtelist või absoluutset teed
Kontrolli:
pwd
ls
ls kahtlane-fail
Kui fail peaks justkui olemas olema, aga käsk ikka ei leia seda, siis vaata, kas:
- suur- ja väiketähed on õiged
- kasutad
./failvõi../failõigesti - fail asub hoopis mõnes muus kaustas
“Permission denied”
See tähendab enamasti:
- sul ei ole õigust faili lugeda, kirjutada või käivitada
- skriptil puudub täitmisõigus
- üritad teha midagi süsteemikaustas ilma vajalike õigusteta
Kontrolli:
ls -l fail
ls -ld kaust
Kui probleem on skripti käivitamises, siis on väga tavaline põhjus lihtsalt see, et täitmisõigus puudub.
Vale shell või vale süntaks
Vahel ei ole probleem failis ega õigustes, vaid selles, et käsku tõlgendab teine shell, kui sa arvasid.
Kontrolli:
echo "$SHELL"
bash --version
zsh --version
Kui skript kasutab Bashi süntaksit, siis tasub vaadata, kas tal on korralik shebang, näiteks:
#!/usr/bin/env bash
Ja testi vajadusel nii:
bash skript.sh
Puudu olev pakett
Kui tööriista ei leita ja nimi on õige, siis võib lahendus olla lihtsalt paigaldus.
Näited:
sudo apt install ripgrep
sudo dnf install ripgrep
brew install ripgrep
Siin aitab sind peatükk Paketihaldus: apt, dnf, pacman, brew.
Hea veaotsingu küsimused
Kui tahad end ise kiiresti edasi aidata, siis küsi:
- kas ma olen õiges kaustas
- kas see fail on päriselt olemas
- kas see käsk on masinas olemas
- kas mul on vajalikud õigused
- kas ma kasutan õiget shelli
Kui neile küsimustele vastad, on suur osa “müstilistest” vigadest juba pooleldi lahendatud.
Minitest
- Kontrolli, kas sinu masinas leitakse käsk
python3käsugacommand -v. - Tee meelega üks vale failinimi ja vaata, millise vea saad.
- Seleta oma sõnadega, mida tähendab “command not found”.
- Seleta oma sõnadega, mida tähendab “permission denied”.