¿Cuáles son las diferencias fundamentales entre los shells mainstream * NIX y qué escenarios pueden solicitarle que use uno sobre el otro? Entiendo que algo de esto probablemente se reduzca a las preferencias del usuario, pero solo he usado bash y estoy interesado en saber dónde podría ser útil otro shell.
Además, ¿hay algún impacto en los scripts de shell escritos por el usuario cuando se ejecuta bajo un shell u otro o es simplemente una cuestión de cambiar el shell en la parte superior del archivo? Mi instinto dice que no es tan fácil.
jsh
(¡que no es un shell java!), Que carece de sustitución variable como${VAR#foo}
y${VAR%bar}
.tcsh
es bastante popular entre los usuarios de UNIX que aprendieron sus trucos ante los ~ mediados de los años 90 (que se produjo la introducción de ambosbash
yzsh
), especialmente entre los de mayor edad UNIX +C
desarrolladores, que comenzó su vida concsh
(recordatorio, el c decsh
stands para laC
lengua , que fue la inspiración para sus diferencias con las conchas de estilo bourne). Consulte también la programación de Csh considerada dañina , que a menudo uso para obtener consejos sobre la magia profunda POSIX (además de sus argumentos anti-csh).Hay dos sabores básicos de shell, sh (por ejemplo, bash) y csh (por ejemplo, tcsh). Para uso interactivo, todo se reduce a lo que estás acostumbrado. He usado csh, y luego tcsh, durante años y sería doloroso cambiar, solo porque estoy tan acostumbrado. También he usado bash, y no creo que haya ninguna razón convincente para cambiar. Excepto tal vez si uno u otro no está disponible en las máquinas que usa habitualmente.
Para la programación, la sintaxis es diferente. No solo puede cambiar el shell, sino que también debe cambiar la sintaxis del script. Para las secuencias de comandos, desea utilizar sh o bash. La sintaxis es mucho más adecuada para las secuencias de comandos, como se explica aquí (gracias a Riccardo Murri por el enlace. Esta es una buena guía sobre las secuencias de comandos bash.
Si no se ha decidido por un shell, y espera escribir algunos scripts, usaría bash solo para reducir la cantidad de cosas que necesita aprender.
fuente
En los viejos tiempos, cuando AT&T inventó UNIX, estaba Bourne Shell, escrito por Steve Bourne. Era bastante básico y carecía de muchas herramientas que damos por sentado hoy en día.
AT&T no estaba realmente en el negocio de UNIX, por lo que en este momento Berkelely adoptó el sistema operativo muy básico, e hicieron algunos cambios en BSD UNIX. Entre muchos cambios, había un nuevo shell, llamado csh, que tenía muchas mejoras sobre sh, incluido el control del trabajo, un mejor uso interactivo, etc. Desafortunadamente, decidieron que la sintaxis de programación sh apestaba y crearon la suya, (algo mal) copiada de los estilos de codificación C. (Una diatriba clásica es http://www.faqs.org/faqs/unix-faq/shell/csh-whynot/ ) Así que ahora había dos sintaxis.
Más tarde, realizaron mejoras en CSH agregando la finalización de pestañas y algunas otras cosas. Esto se convirtió en tcsh, y si usa CSH, este es probablemente el que usa.
AT&T decidió que no estaba totalmente fuera del negocio de UNIX, y también lo pulieron. David Korn (buen tipo) creó el shell Korn. Basado en la idea de extender la sintaxis de shell Bourne, agregó muchas cosas tanto para programadores como para uso interactivo. En realidad, hay algunas versiones, y rara vez puede ver cosas como ksh88 y ksh93, que denotan las variantes.
Luego vinieron FSF y el sistema operativo GNU. Querían hacer su propio sistema operativo compatible con UNIX llamado Hurd, y querían un mejor shell para ello. Llamaron a bash, por Bourne Again SHell. Las reglas POSIX aparecieron justo por esta vez, y querían hacer el shell POSIX. Miraron a su alrededor, tomando la sintaxis de Bourne Shell y las mejoras de Korn Shell, además de robar y extender las funciones interactivas de tcsh. Se convirtió en el shell de facto en Linux, por lo que es muy común.
También está el zsh, escrito para ser el shell 'definitivo'. También es muy común en el mundo de Linux. Extendió bash (y polinizó un poco, algunas cosas nuevas volvieron a bash).
Si tuviera que elegir un caparazón, elegiría bash o zsh. bash posiblemente esté en algunos lugares más que zsh. zsh es más poderoso, pero bash ha estado bien para mí. Real / bin / sh Bourne shell está presente solo por razones históricas. bash tiene prácticamente todo lo que ksh tiene para ofrecer y más. La sintaxis es más limpia que csh o tcsh, y tiene mejores características que cualquiera de ellas.
Convertir un script depende de qué a qué. El estilo de shell Bourne (sh, ksh, bash, zsh) hacia o desde el estilo csh (csh, tcsh) será difícil. Pasar de lo antiguo a lo más nuevo (/ bin / sh => bash, / bin / ksh => zsh) será más fácil que a la inversa.
fuente
Las dos ramas principales de los shells son los derivados de shell Bourne (sh, bash, ksh, ash, yash y zsh) y los derivados de csh (tcsh y ... uhm ... tcsh).
Sospecho (aunque no tengo números reales) que bash es el más utilizado, parece ser el shell predeterminado en la mayoría de los Linux.
La mayoría de las cosas escritas en un derivado de shell bourne probablemente funcionarán en otros. La mayoría de las cosas escritas en un shell Bourne probablemente tendrán que modificarse para ejecutarse bajo csh o tcsh.
Personalmente, utilicé ksh cuando comencé porque eso era lo que estaba en el sistema que estaba usando. Principalmente uso bash ahora.
fuente
He usado numerosas conchas a lo largo del tiempo. No es nada súper avanzado, pero sí muchas cosas prácticas de programación y sysadmin que han requerido suficiente personalización.
Creo que zsh tiene más opciones de personalización, al menos antes, pero después de usarlo durante algunos años tuve suficiente con sus problemas de estabilidad y codificación de caracteres. Bash es sólido como una roca, nunca tuvo problemas similares y está instalado en todas partes.
fuente