Come utente Linux, ho sempre usato bash perché era l'impostazione predefinita su ogni distribuzione che usavo. Le persone che usano altri sistemi Unix come BSD sembrano usare altre shell molto più frequentemente. Nell'interesse di imparare un po' di più, ho deciso di provare zsh.
Come utente bash:
- Quali funzioni mi mancheranno?
- E a cosa dovrei prestare attenzione?
Risposta accettata:
Per una risposta più ampia, leggi https://apple.stackexchange.com/questions/361870/what-are-the-practical-differences-between-bash-and-zsh/361957#361957
C'è già stata un bel po' di attività sull'argomento su altri siti di Stack Exchange. La mia esperienza nel passare da bash a zsh, per quanto posso ricordare (è stato anni fa²), è che non mi sono perso nulla. Ho guadagnato molto; ecco quelle che penso siano le semplici funzionalità specifiche di zsh che utilizzo di più:
-
La funzione di zsh che mi manca di più quando uso occasionalmente bash è autocd:in zsh, eseguire una directory significa passare ad essa, a condizione che tu attivi
autocd
opzione.⁴ -
Un'altra caratteristica molto utile è la fantasia globbing. I
geroglificii caratteri sono un po' difficili da ricordare ma estremamente convenienti (come in, spesso è più veloce cercarli che scrivere l'equivalentefind
comando). Alcuni degli esempi più semplici:
foo*~*.bak
=tutte le corrispondenze perfoo*
tranne quelli che corrispondono a*.bak
foo*(.)
=solo file normali che corrispondono afoo*
foo*(/)
=solo le directory che corrispondono afoo*
foo*([email protected])
=solo link simbolici penzolanti che corrispondono afoo*
foo*(om[1,10])
=i 10 file più recenti che corrispondono afoo*
foo*(Lm+1)
=solo file di dimensione> 1 MB
dir/**/foo*
=foo*
nella directorydir
e tutte le sue sottodirectory, ricorsivamente⁴ -
Per rinominazioni fantasiose,
zmv
integrato può essere utile. Ad esempio, per copiare ognifile
infile.bak
:zmv -C '(*)(#q.)' '$1.bak'
-
Sia bash che zsh hanno un sistema di completamento decente che deve essere attivato esplicitamente (
. /etc/bash_completion
oautoload -U compinit; compinit
). Zsh's è molto più configurabile e generalmente più elaborato.
Se esegui zsh senza un .zshrc
, avvia un menu interattivo che consente di scegliere le opzioni di configurazione. (Alcune distribuzioni potrebbero disabilitarlo; in tal caso, esegui autoload zsh-newuser-install; zsh-newuser-install
.) Raccomando di abilitare le opzioni di cronologia consigliate, di attivare il completamento ("nuovo stile") e di attivare le "opzioni shell comuni" eccetto beep
. Successivamente, configura più opzioni man mano che le scopri.
²All'epoca il completamento programmabile era la funzione killer di zsh, ma bash l'ha acquisita subito dopo.
⁴Le funzionalità che bash ha acquisito solo nella versione 4 (quindi non erano ampiamente disponibili al momento della pubblicazione di questa risposta e non sono disponibili su bash fornito dal sistema su macOS) sono di tipo più piccolo.