È disponibile ShellCheck 0.9, un analizzatore statico per script di shell

È stato pubblicato il rilascio del progetto ShellCheck 0.9, che sviluppa un sistema per l'analisi statica degli script di shell che supporta l'identificazione degli errori negli script tenendo conto delle funzionalità di bash, sh, ksh e dash. Il codice del progetto è scritto in Haskell e distribuito sotto la licenza GPLv3. Vengono forniti componenti per l'integrazione con Vim, Emacs, VSCode, Sublime, Atom e vari framework che supportano la segnalazione degli errori compatibile con GCC.

È disponibile ShellCheck 0.9, un analizzatore statico per script di shell

Supporta l'identificazione sia degli errori di sintassi nel codice, che portano l'interprete a visualizzare un errore al momento dell'esecuzione, sia dei problemi semantici, grazie ai quali l'esecuzione non viene interrotta, ma si verificano anomalie nel comportamento dello script. L'analizzatore può anche identificare colli di bottiglia, problemi non evidenti e insidie ​​che in determinate circostanze possono portare a guasti.

Tra le classi di errori rilevati possiamo notare problemi con l'escape di caratteri speciali e il loro inserimento tra virgolette, errori nelle espressioni condizionali, uso errato dei comandi, problemi di elaborazione di ora e data ed errori di sintassi tipici per i principianti. Ad esempio, l'assenza di spazi nel confronto “[[ $foo==0 ]]”, la presenza di spazi “var = 42” o l'indicazione del simbolo $ nell'assegnazione di “$foo=42”, l'uso di variabili senza virgolette “echo $1”, l'indicazione di parentesi quadre aggiuntive in "tr -cd '[a-zA-Z0-9]'",

Inoltre, supporta l'output di consigli per migliorare lo stile del codice, eliminare i problemi di portabilità e aumentare l'affidabilità degli script. Ad esempio, al posto di “echo $[1+2]” verrà proposto di utilizzare la sintassi “$((..))”, la costruzione 'rm -rf “$STEAMROOT/”*' verrà contrassegnata come non sicura e in grado di eliminare la directory root se la variabile non è riempita $STEAMROOT e l'uso di "echo {1..10}" verrà evidenziato come incompatibile con dash e sh.

Nella nuova versione:

  • Aggiunto avviso per espressioni come 'local readonly foo'.
  • Aggiunto avviso sui comandi non disponibili.
  • Aggiunto avviso sui backlink a 'dichiarare x=1 y=$x'.
  • Aggiunto avviso se $? utilizzato per stampare il codice di ritorno di echo, printf, [ ], [[ ]] e test.
  • Aggiunto consiglio per rimuovere ((..))inarray[((idx))]=val.
  • Aggiunta una raccomandazione per concatenare le doppie parentesi in contesti aritmetici.
  • Aggiunta una raccomandazione per rimuovere le parentesi nell'espressione a[(x+1)]=val.

Fonte: opennet.ru

Aggiungi un commento