Publicēts izlaidums projektam ShellCheck 0.9, kas attīsta statiskās analīzes sistēmu shell skriptiem, kas atbalsta kļūdu noteikšanu skriptu rakstīšanas īpatnību dēļ bash, sh, ksh un dash. Projekta kods ir uzrakstīts Haskell valodā un tiek izplatīts GPLv3 licencē. Tiek nodrošināti komponenti integrācijai ar Vim, Emacs, VSCode, Sublime, Atom un dažādām integrētām vidēm, kas atbalsta GCC saderīgu kļūdu ziņojumu izeju.

Atbalsta kļūdu atklāšanu gan sintaktiskajās kļūdās, kas izraisa interpretatora kļūdu izpildes brīdī, gan semantiskajās problēmās, kas neizraisa izpildes traucējumus, bet rada anomālijas skripta darbībā. Analizators arī var identificēt šaurās vietas, neskaidras problēmas un slēptos akmeņus, kas var novest pie kļūdām noteiktos apstākļos.
No atklāto kļūdu klasēm var izcelt problēmas ar speciālo simbolu iepriekšējo izmantošanu un iekavās, kļūdas nosacījumu izteiksmēs, nepareizu komandu lietojumu, laika un datu apstrādes problēmas, kā arī tipiskas sintaktiskās kļūdas iesācējiem. Piemēram, trūkstoši atstarpes salīdzinājumā «[[ $foo==0 ]]», atstarpes klātbūtne «var = 42» vai simbols $ pie piešķiršanas «$foo=42», izmantojot mainīgās bez iekavām «echo $1», lieko kvadrātiekavu norādot «tr -cd ‘[a-zA-Z0-9]'»,
Papildus tiek nodrošinātas rekomendācijas koda stila uzlabošanai, problēmu novēršanai saistībā ar pārnesamību un skriptu darbības uzticamības palielināšanai. Piemēram, vietā, lai izmantotu «echo $[1+2]», tiks ieteikts izmantot sintaksi «$((..))», konstrukcija ‘rm -rf «$STEAMROOT/»*’ tiks atzīta par nedrošu, jo var izdzēst saknes katalogu, ja mainīgais $STEAMROOT nav aizpildīts, bet izmantojot «echo {1..10}», tiks izcelta kā nesaderīga ar dash un sh.
Jaunajā versijā:
- Pievienots brīdinājums par izteiksmēm, piemēram, ‘local readonly foo’.
- Pievienots brīdinājums par komandu nepieejamību.
- Pievienots brīdinājums par atpakaļejošajām atsaucēm ‘declare x=1 y=$x’.
- Pievienots brīdinājums, ja $? tiek izmantots, lai izdotu atgriešanās kodu echo, printf, [ ], [[ ]] un test.
- Pievienota rekomendācija par ((..))inarray[((idx))]=val izņemšanu.
- Pievienota rekomendācija par divkāršo iekavu apvienošanu aritmētiskajos kontekstos.
- Pievienota rekomendācija par apaļu iekavu noņemšanu izteiksmē a[(x+1)]=val.
Avots: opennet.lv
