Evitar "BASH-isms" en los scripts de shell


37

¿Existe una herramienta similar a Perl :: Critic que inspeccionará sus scripts de shell y señalará defectos, problemas de portabilidad, usos de programas no estándar sin fallos, usos de programas depreciados, etc.?

Me doy cuenta de que set -o posixdeshabilitará el uso que no sea POSIX, pero eso no me dirá cosas que quiero saber, como las matrices de shell de indexación zsh que comienzan en 1 y bash, desde 0, y ash no admite matrices en absoluto.

Respuestas:


36

Hay checkbashisms . En Debian, se envía como parte de las herramientas de mantenimiento de paquetes .

Pon a prueba tus guiones bajo guión y elegante . Ambos tienen algunas construcciones que no son POSIX, pero si su script funciona en ambos, es probable que funcione en la mayoría de los lugares. (Con la advertencia de que es difícil probar los scripts de shell típicos, ya que tienden a tener muchos casos de esquina).

Si desea que sus scripts sean portables en plataformas Linux integradas, pruébelos con BusyBox . Tenga en cuenta que BusyBox puede estar más o menos restringido, dependiendo de qué tan pequeño desee un sistema integrado; Es bastante normal tener scripts que se basan en una característica que algunas instalaciones de BusyBox no tienen.

Tenga en cuenta que la no portabilidad no proviene solo del shell, sino que también proviene de utilidades externas. OpenBSD y Solaris tienden a tener utilidades con características POSIX y no mucho más, por lo que son buenas para probar la portabilidad.

Deberá consultar la especificación POSIX y otros recursos mencionados en este hilo (especialmente el manual de autoconf ); pero eso es documentación, no ayuda si usa una función accidentalmente.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.