¿Vale la pena cambiar a zsh para uso casual? [cerrado]


192

El shell predeterminado en Mac OS X es bash, que generalmente estoy feliz de usar. Solo lo doy por sentado. Sin embargo, sería realmente bueno si completara automáticamente más cosas , y he escuchado cosas buenas zshal respecto. Pero realmente no tengo la inclinación de pasar horas jugando con la configuración para mejorar mi uso de la línea de comando en una pequeña cantidad, ya que mi vida en la línea de comando no es tan mala.

(Según tengo entendido, bashtambién se puede configurar para que se complete automáticamente de manera más inteligente. Es la configuración que no estoy tan interesado).

¿Cambiar a zsh, incluso en un pequeño número de casos, me facilitará la vida? ¿O es solo un mejor caparazón si dedicas tiempo a aprender por qué es mejor? (Los ejemplos también serían buenos :))


@ Rodney Amato y @ Vulcan Eager dan dos buenas razones para seguir bashy cambiar respectivamente zsh. ¡Parece que tendré que investigar ambos! Oh bien:)

¿Hay alguien con una opinión de ambos lados del argumento?


14
Dado que zsh es (casi) un superconjunto de bash, puede comenzar moviéndose a zsh y usarlo como bash. Entonces puedes aprender las gemas zsh poco a poco.
orip

Si tiene un poco de personalización de bash y a menudo usa el shell dentro de emacs, esto no parece trivial.
Publiqué una

Lo único que no me gusta de zsh es que (al menos en Ubuntu) tendrá que configurarlo usted mismo la primera vez que lo inicie (en lugar de proporcionar algunos valores predeterminados razonables con los que luego puede jugar). Si puedes superar eso, ¡zsh es el mejor!
zrajm

Respuestas:


68

Para uso casual, probablemente sea mejor quedarse con bash y simplemente instalar bash complete.

Instalarlo es bastante fácil, tome el bash-completar-20060301.tar.gz de http://www.caliban.org/bash/index.shtml#completion y extráigalo con

tar -xzvf bash-completion-20060301.tar.gz

luego copie el archivo bash_completion / bash_completion a / etc con

sudo cp bash_completion/bash_completion /etc

que le pedirá su contraseña. Probablemente desee crear un directorio /etc/bash_completion.d para cualquier script de finalización adicional (por ejemplo, tengo el script de finalización de git allí).

Una vez hecho esto, el último paso es asegurarse de que el archivo .bash_profile en su directorio de inicio tenga

if [ -f /etc/bash_completion ]; then
     . /etc/bash_completion 
fi

en él para cargar el archivo de finalización cuando inicia sesión.

Para probarlo, simplemente abra una nueva terminal e intente completar en cvs y debería mostrarle las opciones de cvs en la lista de finalizaciones.


Intenté lo anterior, sin embargo, cada vez que empiezo bash obtengo 4 errores "operador unario esperado" y 4 errores "demasiados argumentos".
AnnanFay

12
Si está utilizando homebrew en OSX, puede ejecutarlo brew install bash-completion.
Nathan Villaescusa

3
Bash-Completion2 es mejor! En OS X:brew tap homebrew/versions; brew install bash-completion2
Zearin

85

Personalmente, me encanta zsh.

En general, probablemente no notarás la diferencia entre él y bash, hasta que quieras hacer rápidamente cosas como el engrosamiento recursivo:

  • **/*.c por ejemplo.

O utilice alias de sufijo para asociar programas específicos con diferentes sufijos, de modo que pueda "ejecutarlos" directamente. El siguiente alias le permite "ejecutar" un archivo fuente C en el indicador simplemente escribiendo ./my_program.c, lo que funcionará exactamente como si lo hubiera hecho vim ./my_program.c. (Más o menos el equivalente a hacer doble clic en el icono de un archivo).

  • alias -s c=vim

O imprima los nombres de los archivos modificados hoy:

  • print *(e:age today now:)

Probablemente pueda hacer todas estas cosas en bash, pero mi experiencia con zsh es que si hay algo que quiero hacer, probablemente pueda encontrarlo en zsh-lovers . También encuentro el libro ' De Bash a Z-Shell ' realmente útil.

¡Jugar con la mente una cantidad asombrosamente grande de opciones también es muy divertido!


1
Los primeros dos ejemplos aquí no significan nada para mí (un usuario casual de bash que considera cambiar a zsh). ¿Podría explicar qué significa "globulación recursiva" o qué quiere decir con "asociar programas específicos con diferentes sufijos"?
aaronsnoswell

55
@aaronsnoswell: "Globado recursivo" significa buscar en un subdirectorio y todos sus subdirectorios archivos cuyos nombres coincidan con un patrón en particular. Bash no hace eso por defecto; usted findo locatepara buscar de forma recursiva. Pero una vez que está permitiendo que otro programa haga la búsqueda, pierde los límites entre los nombres (a menos que tenga cuidado), así como el acceso a las capacidades internas de globbing del shell, y básicamente tiene que conformarse con lo que proporciona el otro programa, o canalizar su salida a través de un programa como grep, awko sed(todo bastante complejo por derecho propio).
cHao

66
En estos días, puede configurar la globstaropción en bash para permitir la búsqueda recursiva como se mencionó anteriormente. Sin embargo, estoy bastante seguro de que ese no fue el caso cuando se escribió esta respuesta.
cHao

Con glob_star_shortadentro zsh, ahora puedes hacer **.c, que se interpreta como **/*.c.
PythonNut

Yo uso zsh 5.3y conseguir command not found: ageconprint *(e:age today now:)
Timo

38

Cambia a zsh. Tendrás acceso a:

  1. zmv: Puedes hacer: zmv '(*).mp3' '$1.wma'para miles de archivos.
  2. zcalc: Calculadora extremadamente cómoda, mejor que bc.
  3. zparseopts: One-liner para analizar opciones complejas arbitrarias dadas a su script.
  4. autopushd: Siempre puede hacer lo popdsiguiente cdpara volver a su directorio anterior.
  5. Soporte de punto flotante. Se necesita de vez en cuando.
  6. Soporte de hashes. A veces son solo una característica clave.

17
El ejemplo para zmv debería ser zmv '(*). Mp3' '$ 1.wma'. Corríjalo, tal presentación descuidada puede ser confusa y frustrante para los inexpertos.
qed

55
@TravisBear autoload zcalc; zcalc(aunque yo mismo escribo pythonsiempre que necesito una calculadora).
Francisco

9
"autopushd: siempre puedes hacer popd después de cd para volver a tu directorio anterior". ¿No es el equivalente de ese solo cd -?
minhaz1

44
zmvy zcalcno están disponibles fuera de la caja. No está claro que zmvsolo se esté renombrando archivos; Pensé que podrías haber estado convirtiendo el formato. No sé qué significa incluso "hashes". Esta publicación parece que solo es "útil" para las personas que ya conocen zsh.
mpen

1
@Mark En este caso, "hash" es sinónimo de "matriz asociativa". bash4 se lanzó solo unos meses antes de esta respuesta.
chepner

13

Si todo lo que quiere usar ZSH es una mejor terminación, la configuración es bastante fácil. Coloque esto en su ~ / .zshrc:

autoload -U zutil      # [1]
autoload -U compinit   # [2]
autoload -U complist   # [3]
compinit

Sin embargo, vale la pena echarle un vistazo a todas las otras excelentes características de ZSH. El ejemplo anterior le dará un mensaje bastante simple con una buena finalización. Si no quiere jugar con las configuraciones, pero quiere ver qué puede hacer ZSH por usted, busque "zshrc" en Google y obtendrá algunas configuraciones listas para usar para comenzar.


3
¿Para qué tipo de cosas se completará esto? No me gusta agregar cosas al azar sin saber lo que está haciendo.
mpen

6

zsh tiene una configuración de consola gui. Puede configurarlo de manera bastante rápida y fácil sin tener que manipular los archivos de configuración. No creo que necesite mucho tiempo para configurarlo, probablemente 10 segundos con solo usar los valores predeterminados, así que continúe y pruébelo.


10
¿Cómo se accede a esta "consola gui"?
mpen

Por lo general, es lo primero que ve cuando carga zshsin ningún archivo de puntos relacionado. Para obtenerlo manualmente, intenteautoload -U +X zsh-newuser-install; zsh-newuser-install -f
Adam Katz

3

Staale está hablando de un programa similar a un asistente (CUI) que se ejecuta automáticamente la primera vez que ejecuta zsh. Simplemente responda algunas preguntas, vea / cambie los valores predeterminados y está configurado para usted.

IBM developerWorks tiene excelentes recursos en zsh.

No he usado funciones muy avanzadas y hasta ahora no he encontrado serias diferencias que puedan obstaculizar a alguien que viene de bash.

Algunos ejemplos:

  • !? pattern <Tab> se completará automáticamente con el último comando en el patrón de coincidencia del historial. Muy útil.

  • Puede configurar un aviso en el RHS. Un uso es mantener un indicador de ancho fijo en el lado izquierdo para que todos los comandos se alineen bien mientras se muestra el pwd (o cualquier cosa de ancho variable) como el indicador del lado derecho.

  • Puede redirigir la entrada de múltiples archivos (aún para probar esto): cat <archivo1 <archivo2 <archivo3

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.