Comparación de proyectiles Unix

9

De los principales shells de Unix (bash, ksh, tcsh, zsh, otros?), ¿Hay alguna razón convincente para usar uno sobre otro?

  • ¿Cuál es el más interactivo / amigable con la línea de comandos?
  • ¿Cuál es el más propicio / intuitivo para escribir guiones?
  • ¿Hay algunas características integradas importantes que ofrece un shell que otras no?
  • ¿Alguno de estos caparazones es realmente bueno para un tipo de función, pero no para otro? ¿O son todos bastante redondeados / flexibles?
  • ¿Es solo una cuestión de preferencia personal?

Puedo hacer este wiki de la comunidad si alguien lo prefiere.

Andy White
fuente

Respuestas:

17

Actual:

  • bash- Bourne nuevamente shell, shell predeterminado en la mayoría de las distribuciones de Linux. Características decentes;
  • zsh - la más rica en funciones, pero todavía rara vez se usa;
  • ksh - shell predeterminado en Solaris, AIX y otros pocos dispositivos;
  • tcsh - shell predeterminado en varios * sabores BSD unices;

Histórico:

  • sh- Shell Bourne original (lanzado en 1977). Obsoleado por bash;
  • csh- C shell original (lanzado en 1978). Obsoleado por tcsh y ksh;

Tenga en cuenta que bash, ksh y zsh derivan de la sintaxis sh, mientras que tcsh deriva de la sintaxis csh. Estas son dos sintaxis bastante diferentes.

El gráfico de características (wiki).

vartec
fuente
La mayoría de los scripts generalmente están escritos para ser compatibles con sh, ya que lanzar un script a través de sh suele ser mucho más rápido que bash.
Mikeage
¿Como es que? En Linux / bin / sh es enlace simbólico a / bin / bash.
vartec
2
/ bin / sh no siempre es un enlace simbólico a / bin / bash
Brad Gilbert
1
Cuando crea una instancia de bash como "sh", se ejecuta en un modo "sh" que admite un subconjunto de comandos bash. Creo que la sintaxis "sh" es un estándar POSIX.
duffbeer703
En Debian puede usar 'dash' como sustituto de '/ bin / sh'.
drybjed
9

pez es un nuevo shell que quizás sea más interesante que los demás, no porque necesariamente tenga más características, sino porque simplemente funcionan de manera predeterminada y porque fish se esfuerza por la usabilidad.

Algunas capturas de pantalla ( 1 , 2 , 3 , 4 ) son suficientes para dar una idea general.

fish es ahora el shell predeterminado en mi Mac en el trabajo. Imagínate.

Peter Hilton
fuente
2

Si vas a aprender un shell diferente a sh/ bash, también podrías ir conzsh . No creo que nadie discuta seriamente que es el más poderoso y lleno de características de los shells alternativos; si es solo hinchazón, por supuesto, todavía está en debate.

He oído cosas buenas fish, pero nunca me esforcé por molestarme con ellas.

Los administradores que conozco consideran cshy tcshson abominaciones que deben evitarse a toda costa, y estoy de acuerdo con ellos a pesar de que nunca me vi obligado a pasar por ninguno de los dos.

kquinn
fuente
2

Recomendaría saber bash bien, ya que es uno de los más comunes (generalmente el predeterminado de Linux). Personalmente, me encanta zsh como mi shell interactivo. Tiene excelentes características de terminación. Por ejemplo, puede establecer una lista de hosts y, cuando haga algo como ssh Ser [tab], sabrá intentar completar automáticamente uno de esos hosts. También tiene gloging recursivo, por lo que si desea encontrar todos los archivos jpeg en el subdirectorio actual y puede utilizar ls -ld **/*.jpg. Hay muchas funciones divertidas con zsh (busca los archivos .zshrc de las personas), y puedes configurarlo como 'compatible con bash', por lo que es fácil cambiar entre los dos. Si combina esto con la pantalla GNU, es posible que trabajar con la línea de comandos sea un placer.

Kyle Brandt
fuente
1

No olvide su otra pregunta El shell Unix / Linux más común: el shell más popular es probablemente el más popular por una razón ;-)

Por lo que vale, la mayoría de las personas no se desconectan entre los shells con frecuencia, por lo que será difícil obtener una comparación completa de las diversas opciones; Es más probable que veas a diferentes personas defendiendo las virtudes de sus conchas favoritas. Por lo poco que he escuchado acerca de diferentes shells, todos ofrecen algunas de las mismas características básicas (como redirección de E / S, historial de comandos, etc.) por lo que es probable que la preferencia personal sea un componente importante.

David Z
fuente
1

Una razón convincente para usar ZSH que no se ha mencionado es el modo vi y el modo emacs .

Para aquellos que aman usar su memoria muscular vi en el caparazón, esta es una característica asesina.

Y para aquellos que prefieren emacs, también pueden usar esas combinaciones de teclas, pero los verdaderos creyentes de emacs probablemente dirían que emacs es su caparazón favorito.

;-)

Somantra
fuente
0

La preferencia por el uso diario es realmente una cuestión de gusto personal, sin embargo, cuando escribo guiones, trato de cumplir con posix por razones de portabilidad.

Vincent De Baere
fuente
0

Al igual que Heads Up: Ubuntu predetermina "sh" a "dash", lo que ocasionó algunos problemas en el pasado con la compatibilidad POSIX. Aparentemente, los comandos de eco difieren ligeramente.

lmbus
fuente