¿Los guiones dash, ash y sh son 100% compatibles?

16

¿Quería saber si los scripts escritos para dash, ash y sh son 100% compatibles?

¿Hay alguna característica adicional para el guión o la ceniza, o el cambio de sintaxis?

Por lo que escuché, Ash es un descendiente directo de sh.

usuario1115057
fuente
Ash es una forma rayada de bash
Joe
44
¿Fuente? No vi nada que dijera que la ceniza está relacionada con bash
user1115057
¿Por qué las personas simplemente no envían parches a bash en lugar de crear todo tipo de conchas, eso me aturde todo el tiempo? Si realmente quiere saber, lea el manual, por ejemploman ash
daisy
2
Correcto, no es descendiente de bash. Sería más preciso decir que son descendientes de sh (el shell Bourne original), pero eso tampoco es del todo correcto.
Zlatko
Puede usar la utilidad checkbashismspara probar que su script es compatible con POSIX.
donothings exitosamente

Respuestas:

18

La respuesta corta es no, no son 100% compatibles.

Pero la mayoría de las conchas están bastante cerca de lo básico, por lo que rara vez se topan con inconsistencias. De hecho, la mayoría de los shells difieren no mucho por la sintaxis agregada, sino por algunas características adicionales como la finalización de pestañas y similares.

Además, dashes una especie de descendiente de ash- o puerto de BSD a Linux, para ser precisos. Y todos ellos deberían ser descendientes o diferentes implementaciones de sh. De hecho, shes en la mayoría de los sistemas sólo un enlace simbólico a bash, dasho 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 el rendimiento. Por lo tanto, son menos ricas en características bash, pero son shells totalmente legítimos. Bash es rico en funciones para el trabajo interactivo, pero usa más memoria, por ejemplo.

Zlatko
fuente
Pero para el uso del script, ¿son compatibles?
user1115057
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
usuario1115057
Deben ser compatibles entre sí si no está utilizando algunas características oscuras. Pero si usa el script bash, podría encontrarse con más problemas.
Zlatko
nunca tuvo la intención de usar bash con sh o ash o dash. ¿Cuáles son esas características oscuras?
user1115057
1
Muchas de las funciones más nuevas de bash son adiciones sobre POSIX, por lo que es cada vez más probable que escriba código no portable si las está utilizando. IIRC incluso la construcción [[]] no está en sh. También tenga en cuenta que si no está escribiendo un script de shell puro, la diferencia en las herramientas también entra en juego (diferentes versiones de sed, grep, awk ...).
lynxlynxlynx
1

Cabe mencionar que en algunos sistemas, en particular Debian, / bin / ceniza no está disponible:

$ type ash dash
bash: type: ash: not found
dash is /bin/dash
Steven Penny
fuente
2
Podrían tener ocupada la ceniza.
muru