Vale la pena passare a zsh per l'uso occasionale? [chiuso]


192

La shell predefinita in Mac OS X è bash, che sono generalmente felice di usare. Lo dò per scontato. Sarebbe davvero bello se completasse automaticamente altre cose , e ho sentito cose positive zsha riguardo. Ma non ho davvero la tendenza a passare ore a giocherellare con le impostazioni per migliorare il mio utilizzo della riga di comando di una piccola quantità, poiché la mia vita sulla riga di comando non è poi così male.

(A quanto ho capito, bashpuò anche essere configurato per il completamento automatico in modo più intelligente. È la configurazione che non mi interessa tanto.)

Passare a zsh, anche in un numero limitato di casi, mi semplificherà la vita? O è solo una shell migliore se si mette il tempo per imparare perché è meglio? (Anche gli esempi sarebbero belli :))


@ Rodney Amato e @ Vulcan Eager danno due buoni motivi per attenersi bashe passare rispettivamente a zsh. Sembra che dovrò indagare su entrambi! Oh bene:)

C'è qualcuno con un'opinione di entrambe le parti dell'argomento?


14
Poiché zsh è (quasi) un superset di bash, puoi iniziare con il passaggio a zsh e usandolo come bash. Quindi puoi imparare le gemme zsh un po 'alla volta.
orip

Se hai un po 'di personalizzazione bash e usi spesso la shell all'interno di emacs, questo non sembra banale. Ho postato domanda relativa: stackoverflow.com/questions/13326879/...
justingordon

L' unica cosa che non mi piace di zsh è che (almeno su Ubuntu) dovrai configurarlo tu stesso la prima volta che lo avvii (invece di fornire alcune impostazioni predefinite sane che puoi in seguito armeggiare). Se riesci a superarlo, zsh è il migliore!
zrajm,

Risposte:


68

Per un uso occasionale probabilmente starai meglio con bash e installando il completamento bash.

Installarlo è abbastanza semplice, prendi bash-completamento-20060301.tar.gz da http://www.caliban.org/bash/index.shtml#completion ed estrailo con

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

quindi copia il file bash_completion / bash_completion in / etc con

sudo cp bash_completion/bash_completion /etc

che ti chiederà la password. Probabilmente vorrai creare una directory /etc/bash_completion.d per eventuali script di completamento aggiuntivi (ad esempio ho lo script di completamento git lì dentro).

Una volta fatto ciò, l'ultimo passaggio è assicurarsi che il file .bash_profile sia presente nella directory home

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

in esso per caricare il file di completamento quando si accede.

Per testarlo basta aprire un nuovo terminale e provare a completare su cvs e dovrebbe mostrarti le opzioni cvs nell'elenco dei completamenti.


Ho provato quanto sopra, comunque dopo ogni volta che inizio bash ricevo 4 errori "operatore unario previsto" e 4 errori "troppi argomenti".
AnnanFay,

12
Se stai usando homebrew su OSX puoi eseguire brew install bash-completion.
Nathan Villaescusa

3
Bash-Completion2 è meglio! Su OS X:brew tap homebrew/versions; brew install bash-completion2
Zearin,

85

Personalmente, adoro zsh.

In generale, probabilmente non noterai la differenza tra esso e bash, fino a quando non vuoi fare rapidamente cose come il globbing ricorsivo:

  • **/*.c per esempio.

Oppure usa gli alias di suffisso per associare programmi specifici a suffissi diversi, in modo da poterli "eseguire" direttamente. L'alias di seguito ti consente di "eseguire" un file sorgente C al prompt semplicemente digitando ./my_program.c, che funzionerà esattamente come se stessi digitando vim ./my_program.c. (Ordinamento dell'equivalente al doppio clic sull'icona di un file.)

  • alias -s c=vim

Oppure stampa i nomi dei file modificati oggi:

  • print *(e:age today now:)

Probabilmente puoi fare tutte queste cose in bash, ma la mia esperienza con zsh è che se c'è qualcosa che voglio fare, probabilmente lo troverò negli amanti di zsh . Trovo davvero utile il libro " Da Bash a Z-Shell ".

Giocare con la mente da un numero incredibile di opzioni è anche divertente!


1
I primi due esempi qui non significano nulla per me (un utente occasionale bash che sta pensando di passare a zsh) - potresti approfondire cosa significa "globbing ricorsivo" o cosa intendi per "associare programmi specifici a suffissi diversi"?
aaronsnoswell,

5
@aaronsnoswell: "Globbing ricorsivo" significa cercare in una sottodirectory e in tutte le sue sottodirectory i file i cui nomi corrispondono a un particolare schema. Bash non lo fa di default; faresti findo locatecercare ricorsivamente. Ma una volta che lasci che un altro programma esegua la ricerca, perdi i confini tra i nomi (a meno che tu non stia attento) così come l'accesso alle abilità globbing interne della shell e sostanzialmente devi accontentarti di ciò che l'altro programma fornisce, o tubo sua uscita attraverso un programma come grep, awko sed(tutti abbastanza complessa di per sé).
cHao,

6
In questi giorni, è possibile impostare l' globstaropzione in bash per consentire la ricerca ricorsiva come menzionato sopra. Abbastanza sicuro che non fosse il caso quando questa risposta è stata scritta, però.
cHao,

Con glob_star_shortin zsh, ora puoi farlo **.c, che viene interpretato come **/*.c.
PythonNut,

Uso zsh 5.3e ottengo command not found: ageconprint *(e:age today now:)
Timo il

38

Passa a zsh. Avrai accesso a:

  1. zmv: Puoi farlo: zmv '(*).mp3' '$1.wma'per migliaia di file.
  2. zcalc: Calcolatrice estremamente comoda, migliore di bc.
  3. zparseopts: One-liner per l'analisi di opzioni complesse arbitrarie fornite al tuo script.
  4. autopushd: Puoi sempre fare ciò popddopo cdper tornare alla directory precedente.
  5. Supporto in virgola mobile. Di tanto in tanto è necessario.
  6. Supporto per hash. A volte sono solo una caratteristica chiave.

17
L'esempio per zmv dovrebbe essere zmv '(*). Mp3' '$ 1.wma'. Per favore correggilo, una presentazione così disattenta può essere confusa e frustrante per gli inesperti.
aggiornato il

5
@TravisBear autoload zcalc; zcalc(anche se io stesso scrivo pythonogni volta che ho bisogno di una calcolatrice).
Francisco,

9
"autopushd: puoi sempre fare popd dopo cd per tornare alla directory precedente." L'equivalente di questo non è solo cd -?
minhaz1,

4
zmve zcalcnon sono disponibili fuori dalla scatola. Non è chiaro che si zmvtratti solo di rinominare i file; Pensavo che avresti potuto convertire il formato. Non so nemmeno cosa significhi il supporto "hash". Questo post sembra solo "utile" per le persone che già conoscono zsh.
aprono il

1
@Mark In questo caso, "hash" è sinonimo di "array associativo". bash4 è stato rilasciato pochi mesi prima di questa risposta.
Chepner,

13

Se tutto ciò che si desidera utilizzare ZSH è un completamento migliore, la configurazione è piuttosto semplice. Inseriscilo nel tuo ~ / .zshrc:

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

Tuttavia, vale la pena dare un'occhiata a tutte le altre fantastiche funzionalità di ZSH. L'esempio sopra ti darà un prompt piuttosto semplice con un buon completamento. Se non vuoi giocherellare con le configurazioni, ma vuoi vedere cosa ZSH può fare per te, Google per "zshrc" e otterrai alcune configurazioni pronte per l'uso per iniziare.


3
Per quali tipi di cose verrà aggiunto questo completamento? Non mi piace aggiungere casualmente roba senza sapere cosa sta facendo.
aprono il

6

zsh ha una cosa di configurazione della console gui. Puoi configurarlo abbastanza rapidamente e facilmente senza dover giocherellare con i file di configurazione. Non credo che avrai bisogno di molto tempo per configurarlo, probabilmente 10 secondi usando solo le impostazioni predefinite, quindi vai avanti e provalo.


10
Come si accede a questa "console gui"?
aprono il

Di solito è la prima cosa che vedi quando carichi zshsenza dotfile correlati. Per ottenerlo manualmente, provaautoload -U +X zsh-newuser-install; zsh-newuser-install -f
Adam Katz,

3

Staale sta parlando di un programma simile a un mago (CUI) che si avvia automaticamente alla prima esecuzione di zsh. Basta rispondere ad alcune domande, visualizzare / modificare i valori predefiniti ed è configurato per te.

IBM developerWorks ha grandi risorse su zsh.

Non ho usato funzionalità molto avanzate e finora non ho riscontrato gravi differenze che dovrebbero ostacolare qualcuno che viene dalla bash.

Qualche esempio:

  • !? pattern <Tab> completerà automaticamente l'ultimo comando nel modello di corrispondenza della cronologia. Molto utile.

  • È possibile configurare un prompt su RHS. Un uso è quello di mantenere un prompt di larghezza fissa sul lato sinistro in modo che tutti i comandi si allineino bene mentre visualizzano il pwd (o qualsiasi cosa di larghezza variabile) come prompt sul lato destro.

  • Puoi reindirizzare l'input da più file (ancora per provare questo): cat <file1 <file2 <file3

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.