Unikanie „BASH-isms” w skryptach powłoki

37

Czy istnieje narzędzie podobne do Perl :: Critic, które będzie sprawdzać skrypty powłoki i wskazywać wady, problemy z przenośnością, zastosowania niestandardowych programów bez awarii, przestarzałe zastosowania programów itp.?

Zdaję sobie sprawę, że set -o posixwyłączy to użycie nie-POSIX-owe, ale to nie powie mi rzeczy, które chcę wiedzieć, takich jak tablice powłoki indeksujące zsh zaczynające się od 1, i bash, od 0, i ash w ogóle nie obsługujący tablic.

amfetamachina
źródło

Odpowiedzi:

36

Występują checkbashizmy . W Debianie jest dostarczany jako część narzędzi do zarządzania pakietami .

Przetestuj swoje skrypty w myślniku i szyku . Oba mają kilka konstrukcji innych niż POSIX, ale jeśli twój skrypt działa w obu, prawdopodobnie będzie działał w większości miejsc. (Z zastrzeżeniem, że trudno jest testować typowe skrypty powłoki, ponieważ mają one zwykle wiele przypadków narożnych.)

Jeśli chcesz, aby twoje skrypty były przenośne na wbudowane platformy Linux, przetestuj je za pomocą BusyBox . Zauważ, że BusyBox może być mniej lub bardziej ograniczony, w zależności od tego, jak mały chcesz system osadzony; skrypty oparte na funkcji, której nie mają niektóre instalacje BusyBox, są całkiem normalne.

Zauważ, że brak możliwości przenoszenia nie pochodzi z samej powłoki, ale również z zewnętrznych narzędzi. OpenBSD i Solaris mają zwykle narzędzia z funkcjami POSIX i niewiele więcej, więc są dobre do testowania przenośności.

Będziesz chciał odwołać się do specyfikacji POSIX i innych zasobów wymienionych w tym wątku (zwłaszcza instrukcji autoconf ); ale taka dokumentacja nie pomaga, jeśli przypadkowo używasz funkcji.

Gilles „SO- przestań być zły”
źródło