GNU/Linux >> Linux Esercitazione >  >> Linux

Quali caratteristiche ci sono in Zsh e mancano da Bash o viceversa?

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 geroglifici i caratteri sono un po' difficili da ricordare ma estremamente convenienti (come in, spesso è più veloce cercarli che scrivere l'equivalente find comando). Alcuni degli esempi più semplici:
        foo*~*.bak =tutte le corrispondenze per foo* tranne quelli che corrispondono a *.bak
        foo*(.) =solo file normali che corrispondono a foo*
        foo*(/) =solo le directory che corrispondono a foo*
        foo*([email protected]) =solo link simbolici penzolanti che corrispondono a foo*
        foo*(om[1,10]) =i 10 file più recenti che corrispondono a foo*
        foo*(Lm+1) =solo file di dimensione> 1 MB
        dir/**/foo* =foo* nella directory dir e tutte le sue sottodirectory, ricorsivamente⁴

  • Per rinominazioni fantasiose, zmv integrato può essere utile. Ad esempio, per copiare ogni file in file.bak :zmv -C '(*)(#q.)' '$1.bak'

  • Sia bash che zsh hanno un sistema di completamento decente che deve essere attivato esplicitamente (. /etc/bash_completion o autoload -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.

Correlati:cosa significa ">/dev/null 2>&1" in questo articolo di base di crontab??

²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.


Linux
  1. Differenza tra "e" sulla riga di comando (bash)??

  2. Quali sono le chiamate al sistema operativo/sistema nativo di Windows e Linux effettuate da malloc()?

  3. Esporta una variabile da bash e usala in Python

  4. Cos'è esattamente <() in bash (e =() in zsh)?

  5. Quali sono i contenuti di /bin/bash e cosa devo fare se li ho accidentalmente sovrascritti

Che cos'è Intel SGX e quali sono i vantaggi?

Quali comandi mancano nel tuo file bashrc?

Cos'è l'hypervisor e quali sono i suoi tipi

Cosa significano -s e [[]] in una condizione if in Bash?

Cos'è Zsh? Dovresti usarlo?

Che cos'è un database distribuito e a cosa servono i sistemi di dati distribuiti?