¿Cómo puedo probar el cumplimiento de POSIX de los scripts de shell?

Pregunta:

Teniendo en cuenta que POSIX es lo más parecido a un estándar común entre todos los unices, me interesa saber si hay un shell que lo admita exclusivamente. Si bien la mayoría de los shells modernos brindan soporte para POSIX (y ejecutarán scripts compatibles con POSIX sin ningún problema), no hacen un buen trabajo al señalar características no compatibles.

¿Existe algún shell que implemente POSIX y POSIX solo, de tal manera que arrojaría un error para cualquier característica no compatible?

EDITAR Quiero aclarar que no estoy pidiendo consejos generales para escribir scripts de shell portátiles. La pregunta relacionada mencionada en los comentarios ya cubría esto. Pensé en esta pregunta cuando descubrí que bash tiene una opción --posix pero solo para descubrir que solo afecta algunos comportamientos de inicialización, que no es exactamente lo que estoy buscando.

Respuesta:

Puede usar ShellCheck (GitHub) como linter para sus scripts de shell. También hay una versión en línea .

Para detectar problemas de compatibilidad POSIX (por ejemplo, SC2039 ), la línea shebang de su script de shell debe ser #!/bin/sh . También puede pasar --shell=sh a shellcheck .

Ejemplo ( test.sh ):

#!/bin/sh
if [[ $HOSTNAME == test ]]; then
    echo fail &> foo
fi

Resultado ( shellcheck test.sh ):

In test.sh line 2:
if [[ $HOSTNAME == test ]]; then
   ^-- SC2039: In POSIX sh, [[ ]] is undefined.
      ^-- SC2039: In POSIX sh, HOSTNAME is undefined.    

In test.sh line 3:
    echo fail &> foo
              ^-- SC2039: In POSIX sh, &> is undefined.

Leave a Comment

Your email address will not be published.

Scroll to Top

istanbul avukat

-

web tasarım