GNU/Linux >> Tutoriales Linux >  >> Linux

¿Cuáles son las diferencias fundamentales entre los principales * nix Shells?

Cerrado . Esta pregunta necesita ser más enfocada. Actualmente no está aceptando respuestas.

¿Quieres mejorar esta pregunta? Actualice la pregunta para que se centre en un solo problema editando esta publicación.

Cerrado hace 6 años.


Mejorar esta pregunta

¿Cuáles son las diferencias fundamentales entre los principales shells *NIX y qué escenarios podrían incitarlo a usar uno sobre el otro? Entiendo que parte de esto probablemente se deba 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 un impacto en los scripts de shell escritos por el usuario cuando se ejecutan 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.

Respuesta aceptada:

Para uso interactivo, hay dos contendientes principales, Bash y zsh, además del rezagado tcsh y el pez recién llegado.

  • Bash es el shell oficial del proyecto GNU y el shell predeterminado en la mayoría de las distribuciones de Linux. En otros dispositivos que no se envían con un caparazón interactivo decente como parte de la instalación base, creo que Bash es lo que la gente tiende a elegir, en un bucle de auto-reforzamiento "Bash está en todas partes, así que lo usaré también". Ver también ¿Por qué Bash está en todas partes? (con mucha información histórica).

  • Zsh tiene casi todas las funciones de Bash y muchas más funciones (¡útiles!). Su principal inconveniente es que es menos conocido, lo que en la práctica significa que es menos probable que lo encuentre ya instalado en un sistema que otra persona configuró y hay menos documentación de terceros al respecto. Consulte también ¿Qué características de zsh usa?, ¿Qué características hay en zsh y faltan en Bash, o viceversa?, ¿Cuáles son las diferencias prácticas entre Bash y Zsh?.

  • Tcsh fue una vez (hasta principios de la década de 1990) el shell con las mejores funciones interactivas, como su predecesor csh. Eso lo hizo popular para uso interactivo (pero no para secuencias de comandos). Zsh se puso al día con tcsh y mejoró aún más con bastante rapidez, y Bash se puso al día (con finalización programable) a principios de la década de 2000, mientras que tcsh apenas ha progresado en los últimos 15 años. Por lo tanto, hay pocas razones para aprender tcsh ahora.

  • Fish intenta ser más limpio que sus predecesores. Tiene algunas características interesantes (sintaxis más simple, coloración de sintaxis en la línea de comando) pero carece de otras (lo que no le guste al autor). La comunidad de peces es mucho más pequeña incluso que la de zsh, lo que hace que los efectos sean aún más agudos.

Para las secuencias de comandos, hay varios idiomas a los que puede apuntar, dependiendo de cuán portátiles desee que sean sus secuencias de comandos.

  • Cualquier cosa que pretenda ser similar a Unix tiene un shell derivado de Bourne como /bin/sh . Todavía hay algunas unidades comerciales donde /bin/sh no es compatible con POSIX.

  • Casi todos los Unix que se ejecutan ahora tienen un sh ejecutable que cumpla al menos con POSIX.2-1992 y, por lo general, con al menos POSIX:2001, también conocido como Single Unix v3. Este shell puede vivir en un directorio diferente como /usr/bin/posix o /usr/xpg6/bin . También existen capas de emulación POSIX para casi todos los sistemas que son lo suficientemente potentes como para soportarlo, lo que lo convierte en un objetivo atractivo.

  • Muchos sistemas Unix tienen ksh93, que trae algunas funciones muy útiles de las que carece POSIX sh (matrices, matrices asociativas, globos extendidos (*(foo) , @(foo|bar) , …), globos nulos (~(N)foo* ),…). Inicialmente, Ksh era un software comercial (se volvió gratuito en 2000, después de que se establecieron algunos hábitos), y muchos dispositivos gratuitos (Linux, *BSD) adquirieron el hábito de proporcionar solo un clon gratuito mucho más antiguo (pdksh) que carece de muchas de estas características útiles. . Pdksh ahora está siendo desplazado por mksh fuera de OpenBSD, pero incluso mksh no logra implementar todas las características de ksh93. Hoy en día, no puede contar con que ksh93 esté disponible en todas partes, especialmente en Linux, donde Bash es la norma.

  • Bash siempre está disponible en Linux (excepto algunas variantes integradas) y, a menudo, en otros unices. Tiene la mayoría de las funciones útiles de ksh93, aunque a veces con una sintaxis diferente.

  • Zsh tiene la mayoría de las funciones útiles de ksh93 y Bash. Su sintaxis central es más limpia pero incompatible con Bourne. A excepción de macOS, no cuente con que zsh esté disponible en un sistema que no instaló.

  • Para secuencias de comandos más avanzadas, puede recurrir a Perl o Python. Estos lenguajes tienen estructuras de datos adecuadas, características de manipulación de texto decentes, combinación de procesos y mecanismos de comunicación decentes, y toneladas de bibliotecas disponibles. La mayoría de los sistemas Unix los tienen, ya sea integrados con el sistema operativo o instalados por el administrador (porque hay tantos scripts de Perl y Python que es raro que el sistema no tenga al menos uno de cada uno).

Relacionado:¿Invertir los resultados de los bucles "for in * do"?
Linux
  1. Debian vs Ubuntu:¿Cuáles son las diferencias?

  2. ¿Qué son los separadores de palabras de Readline?

  3. Linux:¿cuáles son las principales diferencias entre los sistemas operativos basados ​​en Bsd y Linux?

  4. ¿Cuáles son las diferencias entre el kernel enviado de Ubuntu y el kernel ascendente?

  5. Fedora vs Ubuntu:¿Cuáles son las diferencias clave?

Cassandra vs MongoDB - ¿Cuáles son las diferencias?

Terraform vs Kubernetes:¿Cuáles son las diferencias?

¿Cuáles son las diferencias entre cPanel y WHM?

useradd vs adduser:¿Cuáles son las diferencias?

¿Cuál es la diferencia entre &> y >&en bash?

¿Cuáles son las diferencias funcionales entre .profile .bash_profile y .bashrc