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.