Como se indicó, bash
está comúnmente disponible en la instalación predeterminada para muchas distribuciones. Su script no alcanzará la mayor base de usuarios si confía en zsh
.
Una pregunta importante a responder antes de diseñar su script es " ¿Por qué importa en qué shell se ejecuta un script? "
Diferentes shells usan una sintaxis diferente u ofrecen funciones de shell adicionales que pueden no ser compatibles con otros shells. Para escribir una secuencia de comandos para el "mundo general del usuario final de Linux", determine si su secuencia de comandos usa alguna sintaxis o funciones de shell que dependen de un entorno de shell particular.
Por ejemplo, bash
shell admite ciertas expansiones que no son compatibles con dash
Bourne shell o lo que sea que /bin/sh
apunte al sistema del usuario.
$ ls -l /bin/sh
lrwxrwxrwx 1 root root 4 Feb 19 2014 /bin/sh -> dash
Intenta ejecutar echo {1..10}
en /bin/sh
comparación con /bin/bash
y obtendrás resultados muy diferentes.
Lo mismo ocurre con lo zsh
que, aunque admite la mayoría de la bash
sintaxis, ofrece expansión y sintaxis adicionales que no es compatible con el bash
shell. Vea estas tablas comparando shells para ejemplos específicos.
Puede ampliar su base de usuarios potenciales más allá bash
al adherirse a los scripts que funcionan cuando se les llama #!/bin/sh -u
. Sin embargo, esto da lugar a otra pregunta importante: " ¿Qué se sacrifica a cambio de una mayor portabilidad? "
Determine si las diferencias relacionadas con problemas de seguridad, funcionalidad, eficiencia o cualquier otra cosa que considere una prioridad para su script valdrían la pena. Es posible que no desee el uso generalizado de un script con una vulnerabilidad de seguridad conocida solo porque funciona en más entornos.
Se escriben tantos scripts para bash
que el soporte para estos scripts se utilice como criterio al comparar shells de comandos . Muchas más personas podrán ejecutar su script que si se basa en zsh
cualquier otra sintaxis exclusiva de un entorno de shell.
Además, tenga en cuenta que, en última instancia, no tiene control sobre cómo el usuario ejecuta el script (también es útil para depurar scripts en diferentes shells ):
Recuerde que si usa un shell para leer un script de shell ("sh scriptname"), en lugar de ejecutarlo directamente ("./scriptname"), el shell tratará todos los comentarios al comienzo del shell como comentarios. En particular, se ignorará el comentario que especifica el intérprete que se utilizará al ejecutar el script ("#! / Bin / sh -u"), al igual que todas las opciones enumeradas junto a ese intérprete.
Por lo tanto, lo mejor que puede hacer al respecto es hacer que sus scripts sean portátiles, siempre que no haya un gran sacrificio en su funcionamiento.
También puede ver convenciones de codificación Bash: desbordamiento de pila .
zsh
pueden ser populares, mientras que en otros (sector bancario) es prácticamente desconocido. Creo que deberías dar mucha más información si necesitas consejos adecuados sobre este tema.