Quería saber si los scripts escritos para dash, ash y sh son 100% compatibles.
¿Hay alguna característica adicional para guión o ash, o cambio de sintaxis?
Por lo que escuché, ash es un descendiente directo de sh.
Comentarios
Respuesta
La respuesta corta es no, ellos «no son 100% compatibles.
Pero la mayoría de los shells son bastante parecidos a los básicos, por lo que rara vez se encontrará con inconsistencias. De hecho, la mayoría de los shells no se diferencian mucho por la sintaxis agregada, sino por algunas características adicionales como completar tabulación y similares.
Además, dash
es una especie de descendiente de ash
— o puerto de BSD a Linux, para ser precisos. Y todos deben ser descendientes o implementaciones diferentes de sh
. De hecho, sh
es en la mayoría de los sistemas solo un enlace simbólico a bash
, dash
o algo más. Lo que importa es el cumplimiento de POSIX — y cuando escribe scripts de acuerdo con los estándares, no tendrá problemas.
La diferencia entre esos shells está en las optimizaciones y rendimiento. Son menos ricos en funciones que bash
, pero son shells completamente legítimos. Bash tiene muchas funciones para el trabajo interactivo, pero utiliza más memoria, por ejemplo.
Comentarios
- Pero para el uso de scripts, ¿son compatibles?
- Y sobre el cumplimiento de POSIX, incluso si sigo ese estándar, si un script está escrito para Bash, no creo que se ejecute en ningún sh o su descendiente
- Deberían ser compatibles entre sí si ' no está utilizando algunas características poco conocidas. Pero si usa el script bash, es posible que tenga más problemas.
- Nunca tuvo la intención de usar bash con sh o ash o dash. ¿Cuáles son esas características oscuras?
- Muchas de las características más nuevas de bash ' son adiciones a POSIX, por lo que es cada vez más probable que escriba código intransitable si ' los estás usando. IIRC incluso el constructo [[]] no está en sh. También tenga cuidado, que si ' no está escribiendo un script de shell puro, también entran en juego las diferencias en las herramientas (diferentes versiones de sed, grep, awk …).
Respuesta
Debe mencionarse que en algunos sistemas, notablemente Debian, / bin / ash no está disponible:
$ type ash dash bash: type: ash: not found dash is /bin/dash
Comentarios
- Pueden tener busybox ash.
- Dicho esto, hay muchos sistemas que tampoco ' tienen
bash
.
man ash
checkbashisms
para probar que su script sea compatible con POSIX.