Como usuario de Linux, siempre he usado bash porque era el valor predeterminado en cada distribución que usaba. Las personas que usan otros sistemas Unix, como BSD, parecen usar otros shells con mucha más frecuencia. En aras de aprender un poco más, he decidido probar zsh.
Como usuario bash:
- ¿Qué características voy a extrañar?
- ¿Y cuáles debo tener en cuenta?
Respuestas:
Ya ha habido bastante actividad sobre el tema en otros sitios de Stack Exchange. Mi experiencia de cambiar de bash a zsh, hasta donde puedo recordar (fue hace años²), es que no me perdí nada. Gané mucho; Esto es lo que creo que son las características simples específicas de zsh que más uso:
La característica de zsh que más extraño cuando ocasionalmente uso bash es autocd: en zsh, ejecutar un directorio significa cambiar a él, siempre que active la
autocd
opción.Otra característica muy útil es el globbing elegante. Los caracteres
jeroglíficosson un poco difíciles de recordar pero extremadamente convenientes (como en, a menudo es más rápido buscarlos que escribir elfind
comando equivalente ). Algunos de los ejemplos más simples:foo*~*.bak
= todas las coincidenciasfoo*
excepto aquellas que coinciden*.bak
foo*(.)
= solo coincidencia de archivos regularesfoo*
foo*(/)
= solo coincidencia de directoriosfoo*
foo*(-@)
= solo enlaces simbólicos colgantes coincidentesfoo*
foo*(om[1,10])
= los 10 archivos más recientes coincidentesfoo*
foo*(Lm+1)
= solo archivos de tamaño> 1 MB = en el directorio y todos sus subdirectorios, recursivamente⁴dir/**/foo*
foo*
dir
Para cambios de nombre sofisticados, el
zmv
incorporado puede ser útil. Por ejemplo, para copiar cadafile
afile.bak
:zmv -C '(*)(#q.)' '$1.bak'
Tanto bash como zsh tienen un sistema de finalización decente que debe activarse explícitamente (
. /etc/bash_completion
oautoload -U compinit; compinit
). Zsh's es mucho más configurable y generalmente más elegante.Si ejecuta zsh sin a
.zshrc
, se inicia un menú interactivo que le permite elegir las opciones de configuración. (Algunas distribuciones pueden deshabilitar esto; en ese caso, ejecutarautoload zsh-newuser-install; zsh-newuser-install
). Recomiendo habilitar las opciones de historial recomendadas, activar la finalización ("estilo nuevo") y activar las "opciones de shell comunes" exceptobeep
. Más tarde, configure más opciones a medida que las descubra.² En ese momento, la finalización programable era la característica asesina de zsh, pero bash la adquirió poco después.
⁴ Las características que bash adquirió solo en la versión 4 (por lo que todavía no están disponibles en muchos sistemas) son de tipo más pequeño.
fuente
autocd
función que discute anteriormente. Habilite la función usando el comandoshopt -s autocd
. Entonces la función funciona como lo has descrito.where
comando incorporado , que no debe confundirse con elwhich
comando.-exec
un shell para cosas como la selección cone
y una tubería hacia herramientas comosort
ysed
para reescribire
y ordenar). Mucho más verbosamente, por supuesto.Además, la finalización de la pestaña predeterminada es mejor que bash ... por ejemplo ...
~/.e.d
TAB se expandirá a~/.emacs.d/
en zsh, bash solo emitirá un pitido.fuente
setopt
Qué opción no predeterminada utiliza para eso (si corresponde)?_-.
configurado como comodín.zstyle ':completion:*' matcher-list 'm:{a-zA-Z}={A-Za-z}' 'r:|[._-]=* r:|=*' 'l:|=* r:|=*'
. Ver stackoverflow.com/q/7906078/311660zsh
le permite editar un comando de varias líneas (consulte el editor de líneas zsh ), bash no. Si intentas el mismo truco (Ctrl-p
), bash obtiene el último comando.fuente
Bash tiene la característica de poder abrir puertos usando
o
Sin embargo, está deshabilitado en Debian ya que se ve como un obstáculo (si la ruta realmente existe) y está fuera del alcance de lo que debería hacer un shell. Más información [lista de correo debian]
fuente
Que - mejorado en zsh
El
which
comando en bash solo revela la ubicación de un comando.En Zsh
which
revelará la definición de analias
, la fuente de ayfunction
la ubicación de un comando.Digamos que teníamos un alias de shell:
En Bash si preguntamos:
which gg
el resultado sería nuloEn Zsh:
which gg
nos dará ...Digamos que teníamos una función de shell:
En Bash si preguntamos:
which hello
el resultado sería nulo.En Zsh:
which hello
nos dará ...fuente
type
comando (incorporado). Y solo para señalar:which
es un comando externo, no un bash incorporado.zsh: un shell completo
hay muchos, leer
zshcontrib(1)
uno puede detectar dos versiones de juegosautoload
habilitablestetris
(el otro conncurses
)zsh
en competencia conemacs
, para completar (como se describe).=
Me gustaría mencionar la
=
palabra clave, que puede causar irritación concurl
(las URL generalmente tienen?var=val
en ellas; perounsetopt
creo que es posible):q file =less
(gentoo
) resuelve aq file $(which less)
=
se expande a la ruta completa del comando en cuestión.otras golosinas
otras cosas, fuera de la mente, son el indicador correcto
RPS1=%d
(para mostrar$PWD
con estilo), Alt + H(run-help
es decirman
,), Alt + ? (which-command
)vared
yzed
(autoload
función), como minibúfer de Emacs Alt + Xpara ejecutar widgets sin vincularlos, alias globales y sufijos, duración extendida de finalización del comando de seguimiento del historial,-m
y-regex
comparadores, emulación de shell (por ejemplocsh
,ksh
conemulate
) yautoload
run-help
con fragmentos de archivo para los elementos integrados.lamentaciones
Creo que la mayoría de las características, si no todas, se implementaron hace mucho tiempo, y al leer los registros de cambios, no hay cambios importantes ni nuevas funciones, lo cual es muy triste (ya no hay nada que explorar y descubrir).
bash
parece estar más distribuido enreadline
(en oposición azle
) ygnu history
en el espíritu de Linux; por ejemplo, las funciones de lectura de líneas y las combinaciones de teclas se pueden aplicar globalmente (como se mantiene~/.inputrc
y/etc/inputrc
) si no se anula por bash-specificbind
.conclusión
Personalmente, creo
emacs
(especialmente por la perspectiva delemacs-nox
sabor (¿actual?) ) Como la inspiración para un software excepcional comozsh
etmux
hice un muy buen trabajo como ejemplo en dicha implementación; para las personas que aprecian su valor (al nivel de no necesitar / dependiendo delX
servidor). Unix shell es lo suficientemente potente, y su continuidad y consistencia son suficientes para un flujo de trabajo y una productividad adecuados (en informática general).fuente