it-swarm-es.com

Características únicas de bash en comparación con zsh

He sido usuario de zsh durante bastante tiempo (antes de ese tcsh y antes de ese csh). Estoy bastante contento con eso, pero me preguntaba si hay características convincentes de bash que no existan en zsh. Y a la inversa, ¿hay características zsh que no existen en bash? Mi sensación actual es que bash es mejor:

  • Si ya está familiarizado con él y no desea aprender una nueva sintaxis.
  • Va a existir en la mayoría de las máquinas * nix de forma predeterminada, mientras que zsh puede ser una instalación adicional.

No estoy tratando de comenzar una batalla religiosa aquí, por eso solo estoy buscando características que existen en solo uno de los proyectiles.

67
Tim

zsh es para vulcanos. ;-)

En serio: bash 4.0 tiene algunas características que anteriormente solo se encontraban en zsh, como ** globbing:

% ls /usr/src/**/Makefile

es equivalente a:

% find /usr/src -name "Makefile"

pero obviamente más poderoso.

En mi experiencia, la finalización programable de bash funciona un poco mejor que la de zsh, al menos en algunos casos (completando paquetes de Debian por aptitud, por ejemplo).

bash tiene Alt + . para insertar !$

zsh has expansion of all variables, so you can use e.g.

% rm !$<Tab>
</code>

para esto. zsh también puede expandir un comando en backtics, entonces

% cat `echo blubb | sed 's/u/a/'`<Tab>

rendimientos

% cat blabb

Me resulta muy útil expandir rm *, como puede ver qué se eliminaría y tal vez pueda eliminar uno o dos archivos del comando para evitar que se eliminen.

También es bueno: usar la salida de comandos para otros comandos que no leen de stdin pero esperan un nombre de archivo:

% diff <(sort foo) <(sort bar)

Por lo que leí, bash-complete también admite completar nombres de archivo remotos sobre ssh si usa ssh-agent, que solía ser una buena razón para cambiar a zsh.

Los alias en zsh se pueden definir para trabajar en toda la línea en lugar de solo al principio:

% alias -g ... = "../ .." 
% cd ... 
40
0x89

Me gustaría señalar que bash no está instalado de forma predeterminada en FreeBSD, OpenBSD o NetBSD, y tampoco está instalado de forma predeterminada en Solaris 10 (OpenSolaris lo tiene por defecto), la última vez que usé un AIX, o Los servidores HP-UX tampoco se instalaron de manera predeterminada.

Además, en OpenSolaris/bin/sh NO es bash. Es ksh. Los mayores problemas que tengo como portador de software son las personas que asumen que/bin/sh es bash y que aceptará la sintaxis extendida de bash. Si bien este parece ser el caso en la mayoría de las distribuciones de Linux, no es el caso en otros lugares y es realmente molesto.

16
X-Istence

Aunque soy un usuario bash, encuentro una de las características de zsh bastante genial: RPS1.

Recuerda:

  • PS1: el indicador alineado a la izquierda
  • RPS1: el indicador alineado a la derecha

Muestra:

Cuando se usa algo como

PS1=’%B(%h) %m%#%b ‘
RPS1=’(%20<…<%~)'

Obtiene su mensaje a la izquierda y el directorio actual empujado a la derecha. ¡Incluso desaparece cuando la línea actual se está alargando demasiado! Es porque zsh es lo suficientemente inteligente como para dar baja prioridad a RPS1.

Puede ver una captura de pantalla de este ejemplo en http://imgur.com/OAZhC .

12
Chucky

Zsh tiene corrección ortográfica. Si tiene una carta (o más) de descuento, descubrirá lo que quiso decir.

También tiene una finalización de pestañas más robusta, que me gusta.

Zsh tiene una utilidad de configuración interactiva para configurarlo como desee.

Algunas pruebas de velocidad dicen que zsh es más rápido, pero no he notado ninguna diferencia.

9
Magus

No conozco ninguna función bash que zsh no admita. El objetivo de diseño de zsh parece incluir el soporte de cualquier característica que bash agregue.

Todavía uso bash en lugar de zsh. Raramente encuentro características atractivas que zsh admite que bash no. Los problemas ocasionales con zsh a lo largo de los años, o que no existen en ciertos sistemas, han hecho que no valga la pena hacer la transición.

Finalmente puedo usar el mismo Shell en todos los sistemas Unix, no vale la pena romper esto para las funciones que nunca usaré.

Las características presentes en zsh que no están presentes en bash parecen ser en su mayoría lindas, pero no las que serían importantes en el día a día.

6
carlito

bash tiene muchas características que solían estar solo en zsh. Ahora puede tener 'finalización inteligente de pestañas' con bash, como descubrió cualquier usuario reciente de ubuntu.

3
Rory

La sustitución de procesos y el globbing extendido son las dos características que más extrañaría. La configuración del indicador también es bastante buena: ver el nivel de anidamiento al escribir declaraciones complejas en las líneas de comando. La carga automática hace posible la inclusión de muchas funciones en cada Shell.

1
tdavies

Soy fanático de zsh debido al soporte del modo vi, pero estoy descubriendo que no es muy utilizado. Creo que leí que a zsh le gusta tomar características populares de los otros shells y combinarlas (por lo que las cosas específicas de bash y las específicas de csh están disponibles en zsh).

Alguien también dijo que estoy flexionando mi factor geek usando zsh, pero no puedo confirmar ni negar ese rumor.

0
Milner