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 soporte 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.
¿Hay algún shell que implemente POSIX y POSIX solamente, de tal manera que arroje 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 cubrió esto. Pensé en esta pregunta cuando descubrí que bash
tiene una --posix
opción, pero solo para descubrir que solo afecta algunos comportamientos de inicialización que no es exactamente lo que estoy buscando.
fuente
dash
. Mencioné la portabilidad como contexto general para mi pregunta, pero esa no era su verdadera intención.Respuestas:
Desafortunadamente, 'portable' suele ser un requisito más estricto que 'compatible con POSIX' para los scripts de shell. Es decir, escribir algo que se ejecute en cualquier shell POSIX no es demasiado difícil, pero hacer que se ejecute en cualquier shell del mundo real es más difícil.
Puede comenzar instalando cada shell en su administrador de paquetes, en particular los
posh
sonidos de debian como lo que quiere (SHELL Ordinary compatible con las políticas). La política de Debian es POSIX con algunas excepciones (echo -n
especificadas,local
...).Sin embargo, más allá de eso, las pruebas deben cubrir algunos shells (/ bin / sh especialmente) en una gama de plataformas. Pruebo en Solaris (/ bin / sh y xpg4 / sh) y BSD. AIX y HP-UX son muy compatibles y no causan problemas. bash es un pequeño mundo propio.
Recomiendo la guía Autoconf de shell portátil , que es absolutamente brillante y ahorra mucho tiempo. Grandes partes de ella son obsoletas, pero está bien; ¡solo omita TruUnix y Ultrix y así sucesivamente si no le importa!
fuente
posh
de hecho suena como lo que estoy pidiendo. Haré algunas pruebas tan pronto como pueda.Puede usar ShellCheck (GitHub) como un 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 debería ser
#!/bin/sh
. También puedes pasar--shell=sh
ashellcheck
.Ejemplo (
test.sh
):Resultado (
shellcheck test.sh
):fuente
Bash se ejecutará en modo compatible con POSIX si se establece la
POSIXLY_CORRECT
variable de entorno. Desde la página del manual:Muchas otras utilidades de GNU también honrarán
POSIXLY_CORRECT
, por lo que si está en un sistema con herramientas predominantemente de GNU (por ejemplo, la mayoría de los sistemas Linux), este es un buen comienzo si su objetivo es la conformidad POSIX.fuente
[[
.