Το ShellCheck 0.9 είναι διαθέσιμο, ένας στατικός αναλυτής για σενάρια κελύφους

Δημοσιεύτηκε η κυκλοφορία του έργου ShellCheck 0.9, αναπτύσσοντας ένα σύστημα στατικής ανάλυσης σεναρίων κελύφους που υποστηρίζει τον εντοπισμό σφαλμάτων σε σενάρια λαμβάνοντας υπόψη τα χαρακτηριστικά των bash, sh, ksh και dash. Ο κώδικας του έργου είναι γραμμένος σε Haskell και διανέμεται με την άδεια GPLv3. Τα στοιχεία παρέχονται για ενοποίηση με Vim, Emacs, VSCode, Sublime, Atom και διάφορα πλαίσια που υποστηρίζουν την αναφορά σφαλμάτων συμβατή με το GCC.

Το ShellCheck 0.9 είναι διαθέσιμο, ένας στατικός αναλυτής για σενάρια κελύφους

Υποστηρίζει τον εντοπισμό τόσο συντακτικών σφαλμάτων στον κώδικα, που οδηγούν στην εμφάνιση σφάλματος στον διερμηνέα τη στιγμή της εκτέλεσης, όσο και σημασιολογικών προβλημάτων, λόγω των οποίων η εκτέλεση δεν διακόπτεται, αλλά εμφανίζονται ανωμαλίες στη συμπεριφορά του σεναρίου. Ο αναλυτής μπορεί επίσης να εντοπίσει σημεία συμφόρησης, μη εμφανή προβλήματα και παγίδες που μπορεί να οδηγήσουν σε αστοχίες υπό ορισμένες συνθήκες.

Μεταξύ των κατηγοριών σφαλμάτων που εντοπίστηκαν, μπορούμε να σημειώσουμε προβλήματα με τη διαφυγή ειδικών χαρακτήρων και την πλαισίωση τους σε εισαγωγικά, σφάλματα σε εκφράσεις υπό όρους, εσφαλμένη χρήση εντολών, προβλήματα με την ώρα και τις ημερομηνίες επεξεργασίας και τυπικά συντακτικά λάθη για αρχάριους. Για παράδειγμα, η απουσία διαστημάτων κατά τη σύγκριση "[[ $foo==0 ]]", η παρουσία των διαστημάτων "var = 42" ή η ένδειξη του συμβόλου $ κατά την εκχώρηση "$foo=42", η χρήση μεταβλητών χωρίς εισαγωγικά "echo $1", η ένδειξη επιπλέον αγκύλων στο "tr -cd '[a-zA-Z0-9]'",

Επιπλέον, υποστηρίζει την έξοδο προτάσεων για τη βελτίωση του στυλ κώδικα, την εξάλειψη των προβλημάτων φορητότητας και την αύξηση της αξιοπιστίας των σεναρίων. Για παράδειγμα, αντί για «echo $[1+2]» θα προταθεί η χρήση της σύνταξης «$((..))», η κατασκευή «rm -rf «$STEAMROOT/»*» θα επισημανθεί ως μη ασφαλής και μπορεί να διαγράψει τον ριζικό κατάλογο εάν η μεταβλητή δεν έχει συμπληρωθεί $STEAMROOT και η χρήση του "echo {1..10}" θα επισημανθεί ως μη συμβατή με τις παύλες και sh.

Στη νέα έκδοση:

  • Προστέθηκε προειδοποίηση για εκφράσεις όπως "τοπικό μόνο για ανάγνωση".
  • Προστέθηκε προειδοποίηση για μη διαθέσιμες εντολές.
  • Προστέθηκε προειδοποίηση σχετικά με τους συνδέσμους επιστροφής στο «δηλώνει x=1 y=$x».
  • Προστέθηκε προειδοποίηση εάν $? χρησιμοποιείται για την εκτύπωση του κωδικού επιστροφής echo, printf, [ ], [[ ]] και δοκιμής.
  • Προστέθηκε πρόταση για κατάργηση ((..))inarray[((idx))]=val.
  • Προστέθηκε μια σύσταση για τη σύνδεση διπλών παρενθέσεων σε αριθμητικά περιβάλλοντα.
  • Προστέθηκε μια σύσταση για την αφαίρεση παρενθέσεων στην έκφραση a[(x+1)]=val.

Πηγή: opennet.ru

Προσθέστε ένα σχόλιο