Vermeiden von "BASH-Ismen" in Shell-Skripten

37

Gibt es ein ähnliches Tool wie Perl :: Critic , das Ihre Shell-Skripte überprüft und auf Fehler, Portabilitätsprobleme, die Verwendung von Nicht-Standard-Programmen ohne Fallbacks, veraltete Programmverwendungen usw. hinweist?

Ich set -o posixerkenne, dass die Verwendung von Nicht-POSIX deaktiviert wird, aber das sagt mir nichts, was ich wissen möchte, wie zsh, das Shell-Arrays ab 1 indiziert und bash ab 0 und ash, das Arrays überhaupt nicht unterstützt.

Amphetamachine
quelle

Antworten:

36

Es gibt Checkbashismen . Unter Debian wird es als Teil der Paketverwalter-Tools ausgeliefert .

Testen Sie Ihre Skripte unter Dash und Posh . Beide haben einige Nicht-POSIX-Konstrukte, aber wenn Ihr Skript in beiden funktioniert, funktioniert es wahrscheinlich an den meisten Stellen. (Mit der Einschränkung, dass es schwierig ist, typische Shell-Skripte zu testen, da sie in der Regel viele Eckfälle haben.)

Wenn Sie Ihre Skripte auf Embedded Linux-Plattformen portieren möchten, testen Sie sie mit BusyBox . Beachten Sie, dass BusyBox mehr oder weniger eingeschränkt sein kann, je nachdem, wie klein ein eingebettetes System sein soll. Es ist ganz normal, Skripte zu haben, die auf einer Funktion basieren, die einige BusyBox-Installationen nicht haben.

Beachten Sie, dass Nichtportabilität nicht nur von der Shell, sondern auch von externen Dienstprogrammen ausgeht. OpenBSD und Solaris haben in der Regel Dienstprogramme mit POSIX-Funktionen und nicht viel mehr. Sie eignen sich daher gut zum Testen der Portabilität.

Sie sollten sich auf die POSIX-Spezifikation und andere in diesem Thread erwähnte Ressourcen beziehen (insbesondere auf das Autoconf-Handbuch ). Aber das ist Dokumentation. Es hilft nicht, wenn Sie eine Funktion versehentlich verwenden.

Gilles 'SO - hör auf böse zu sein'
quelle