5 de Junio, 2004

La diferencias entre los distintos Shell UNIX

No todos los shell son iguales. Esto igual no parece tan claro como debería, y puede que sea porque estamos muy BASH-ificados ;).

A la hora de programar un script que puede que queramos distribuir, es decir, que pretendemos que funcione en más sitios que en nuestros propio sistema, nos puede surgir la pregunta: ¿será mi programa portable?

La respuesta es realmente complicada. No se puede decir que exista EL shell, solo disponemos de implementaciones más o menos compatibles.

Yo principalmente distinguiría dos tendencias. En primer lugar los shell compatibles con Bourne Shell, que en algún momento de la historia se pudo llamar EL shell (/bin/sh/), y más marginalmente los shell compatibles con el C-Shell (/bin/csh).

Hoy en día esta distinción es algo borrosa ya que cada shell ha tomado más o menos elementos de estos dos, si bien podríamos decir que el Bourne Shell es el referente en lineas muy generales.

Pedir un shell concreto para hacer funcionar nuestro script puede no ser buena idea. Habitualmente cada sistema viene con una serie de shells por defecto que pretenden cubrir todas las necesidades del usuario y, por lo general, si se instala algo extra, será el shell preferido del administrador. Y BASH no es un estándar, aunque si lo repito mucho puedo parecer pesado :P. Una vez más: BASH no es un estándar y no está instalado en todos los sistemas.

¿Cual es entonces el camino? Creo que la mejor opción es asegurarnos de que no empleamos ninguna de las extensiones que todos los shells suelen implementar (y no solo pasa con BASH, los shells de BSD suelen implementar sus propias extensiones), por no hablar de que tenemos que desconfiar de comandos UNIX de los que no podemos estar seguros de su implementación (route, por ejemplo, suele ser dependiente del sistema: me pasa mucho llamar al route de Linux con parámetros de OpenBSD ;)).

He encontrado un documento, el unix-faq/shell/shell-differences (con el sugerente título: UNIX shell differences and how to change your shell), que es de recomendada lectura si queremos saber un poco más de los interfaces de linea de comandos de los sistemas UNIX o UNIX-like.

El texto repasa un poco la historia de los distintos Shells que han marcado tendencias en el mundo UNIX, y nos ayuda a elegir cual de estos programas se ajusta a nuestras necesidades (tabla comparativa incluida).

Quizás no esté actualizado a la última versión de cada uno de los programas, pero a grandes rasgos creo que es una buena referencia.

Ahora la pregunta: ¿cuál es tu shell preferido?

Anotación por Juan J. Martínez.

Los comentarios están cerrados: los comentarios se cierran automáticamente una vez pasados 30 días. Si quieres comentar algo acerca de la anotación, puedes hacerlo por e-mail.