C'è qualche motivo per usare bash su zsh? [chiuso]


33

Sono curioso di sapere perché si vorrebbe eseguire bash invece di zsh. Voglio dire, zsh è completamente retrocompatibile con bash. Non fraintendetemi: non mi piace bash o altro. Voglio sinceramente sapere se ci sono dei vantaggi nell'usarlo su zsh.

Quindi quale motivo c'è per usare bash su zsh?


2
Volevo solo sottolineare che ZSH non è completamente retrocompatibile con BASH. In ZSH, l'indicizzazione dell'array inizia da 1 - in BASH, l'indicizzazione dell'array inizia da 0. Ci sono anche altre differenze, ma volevo sottolineare questo.
Charles Addis,

Risposte:


29

Mi vengono in mente due motivi:

Primo: è disponibile praticamente ovunque. Ho diversi sistemi Linux (CentOS 4.x in questo caso) che non hanno zsh installato. Allo stesso modo, devo toccare sistemi antichi come Solaris 2.6 e versioni successive, HP-UX 10 e versioni successive e versioni simili di scricchiolii di AIX. Quindi devo praticamente usare bash su questi computer, cosa che faccio perché tocco dozzine, se non centinaia, di singoli computer nel corso di un mese, e per ottenere coerenza nella tua interfaccia finisci per essere bloccato usando il impostazioni predefinite.

Secondo: è disponibile praticamente ovunque. Ciò significa che posso scrivere uno script bash shell ed essere sicuro al 99% che funzionerà quando trasferito altrove.

Sì, questi motivi sono superficialmente gli stessi, ma il ragionamento alla base è diverso.


2
Ricordo di avere ksh88 / ksh93 su HPUX, non abbiamo mai avuto accesso all'installazione di bash.
Zlemini,

24

Bash generalmente viene fornito con ogni sistema, zsh no. Adoro zsh, ma per questo uso zsh per un uso interattivo, ma Bash per tutti i miei script .

Trovo che questo renda tutto più semplice, dato che anche quando faccio acquisti qualunque sia compatibile con bash (setopt SH_WORD_SPLIT?), Mi imbatto ancora in sottili differenze.


3
Sarebbe ogni sistema GNU / Linux che intendi?
Andol,

2
Beh, ho scoperto che viene fornito con OS / X e bsd, non ho molta esperienza con altri * nix, loro (versioni recenti) di solito non hanno bash?
Kyle Brandt,

1
Le versioni precedenti di Solaris non includevano bash; In genere dovevo dipendere dal fatto che Bourne fosse la shell per lo scripting. Questo non è stato il caso per un po ', ma potresti ancora imbatterti in alcune grandi aziende.
user5336

3
Dev'essere stato diverso BSD: s allora. Almeno in OpenBSD e in FreeBSD devi installare bash separatamente da porte / pacchetti.
Andol,

andol: Quelli sono quelli che usavo .. Devo ricordare in modo errato, oppure l'ho fatto e semplicemente non ricordo.
Kyle Brandt,

13

zsh non è completamente compatibile con bash. Ci sono una varietà di differenze. Il nuovo zsh è più compatibile con bash (= ~ supportato, exec ora ha le opzioni flag extra, ecc.) Ma la piena compatibilità non è un obiettivo, nemmeno sotto "emula".

Ad esempio, la sottostringa bash è $ {foo: offset: len} ma in zsh è $ foo [inizio, fine] e questo è solo un semplice esempio.

zsh è una shell influenzata da tcsh e ksh che fa molte cose a modo suo; La compatibilità POSIX non è esplicitamente un obiettivo, ma gli sviluppatori sono sensibili alle patch che aggiungono opzioni / emulano il comportamento che avvicina le cose a POSIX. Ma quando inizi davvero a prendere il potere della shell, inizi a creare script di sola scrittura, più che con bash.

bash è POSIX sh + ksh + pedanticismo, con alcune funzionalità ora copiate da zsh. Anch'esso ha script di sola scrittura ma poiché ha operatori meno potenti, si finisce per non usare la concisione di zsh e le cose potrebbero essere più leggibili (tranne per tutte le citazioni per evitare la divisione degli spazi bianchi, lo stupido $ array in stile ksh significa prima -elemento-di-matrice, non tutti-elementi-di-matrice, ecc. ecc.).

Scrivere script che sfruttano appieno la potenza di entrambe le shell non è saggio, a meno che non ci si trovi in ​​un ambiente limitato (ad esempio, scrivere script di sistema rc, dove alcuni FS potrebbero non essere montati, ecc.). Come ideale, usa Perl / Python / Ruby / qualunque cosa per qualcosa di abbastanza grande da aver bisogno dell'espressività non in Bourne sh, se vuoi che gli altri siano in grado di mantenerlo. Conserva le cose della shell per cose relative alla shell interattiva (programmazione del completamento delle schede, ecc.).

Non userei bash su zsh. Userei bare sh over zsh per semplici script, o passerei a una lingua in cui gli array associativi hanno operatori decenti (a differenza di zsh, dove sono, di nuovo, "concisi"). Ho potuto passare uno script sh a bash se ho bisogno che una caratteristica poco per estendere uno script collaudato di lavoro esistente e non hanno il tempo di riscrivere ora.


6
nb: $ {foo: offset: len} è ora supportato in zsh, per compatibilità.
Phil P

6

Il mio consiglio: se stai per avere la portabilità assoluta, scrivi usando le regole della shell Bourne, non preoccuparti nemmeno delle estensioni della shell Korn. Come accennato, ci sono alcune "grandi scatole" più vecchie in giro che non hanno affatto gusci GNU.

Bash fa già "troppo". Ho un amico al lavoro che preferisce zsh, ma non so cosa faccia esattamente.

Ad ogni modo, o scrivi per la shell Bourne (o "bourne again"), o in alternativa, se stai facendo uno script personalizzato per un numero limitato di caselle specifiche, salta interamente "shell hell" e scrivi semplicemente usando perl o python (o qualunque altra cosa il tuo interprete preferito installato localmente è).


5

Oltre al motivo della portabilità sopra indicato, un altro potrebbe essere che bash sta ancora aggiungendo funzionalità.

Ad esempio, bash v4.x + ha introdotto:

  • globbing ricorsivo:

    rm -f ** / *. log

  • autocd:

    Digita "/ tmp" invece di "cd / tmp"


2
In che modo le funzioni di copia di bash da zsh sono un motivo per usare bash?
qqx,

5

A proposito, ti è stato detto molte volte che bash si trova praticamente ovunque, quindi usalo per scrivere script portatili, il che è falso.

Senza senso. Se sai che ogni sistema che ti interessa ha BASH, allora è una dichiarazione perfettamente ragionevole. BASH ha molte funzioni utili che non possono essere ragionevolmente emulate in POSIX sh. L'uso frivolo di funzioni non POSIX non è un'ottima idea, ma usarle quando ne hai veramente bisogno va bene.

La portabilità non è un assoluto. È discutibile quanto lontano devi prenderlo, proprio come qualsiasi altra cosa. Ad esempio, Fedora utilizza i comandi di shell per la creazione di pacchetti RPM e le linee guida per i pacchetti Fedora affermano che poiché tutti i pacchetti devono essere creati nativamente su Fedora, è bene usare tutte le funzionalità di BASH. Anche se teoricamente altre distro senza BASH potrebbero voler riutilizzare i loro RPM di origine, hanno preso una decisione sulla portabilità basata sulla praticità anziché sul mantra "SEMPRE UZE POSIX !! 1".

ZSH non ha funzionato come shell predefinita, semplicemente perché è un caos tentacolare di idee cotte a metà.


2
Puoi spiegare quali caratteristiche o idee in zsh ritieni siano semi-cotte e perché?
funroll

2

A proposito, ti è stato detto molte volte che bashsi trova praticamente ovunque, quindi usalo per scrivere script portatili, il che è falso .

Il modo giusto di scrivere script unix portatili è usare sh, che si trova in ogni sistema * nix .

Ogni altra shell tranne shè solo uno dei tuoi strumenti interattivi quotidiani.

Quando si arriva a bashvs zsh- bashè raggruppato in più *nixesdi zsh, quindi ecco gli svantaggi dell'installazione di software aggiuntivo sul sistema - è necessario mantenerlo. Alcune persone adorano le "funzioni interessanti" di zsh, quindi a loro piace pagare quel prezzo, altre no.


2
Molte implementazioni moderne di sh sono solo collegamenti a bash.
user9517 supporta GoFundMonica il

2
@Iain Ubuntu usa dash di default, e anche se shè bash, abilita la modalità compatibilità quando eseguito come sh.
mgorven

2

Un altro punto:

Molti programmi forniscono un ottimo completamento della bash di default. Per me è la ragione per non cambiare.

[aggiunto a luglio 2013] Bene, dopo alcuni anni di utilizzo di zsh dal commento sopra, devo dire che il completamento della scheda (anche incorporato, senza modifiche di 3a parità) è brillante e sembra che sia molto al di là di quello offerto da bash . :).


3
Penso che funzioni anche con ZSH, con il completamento della scheda in ZSH, ottengo molti argomenti specifici per il programma ...
Kyle Brandt,

Interessante. Stai dicendo che i file di completamento bash funzionano con zsh o che solo alcuni programmi hanno i suoi elementi di completamento specifici di zsh? C'è ancora un layout standard di file di completamento bash che zsh può o non può considerare automaticamente. Hai modificato la tua configurazione zsh per farlo funzionare?
Wojciech Kaczmarek,

@Wojciech Kaczmarek: Penso che tu voglia il 19.3 da quanto segue: zsh.sourceforge.net/Doc/Release/zsh_19.html . Onestamente, non ho mai avuto il tempo di capirlo davvero, ho appena strappato un .zshrc che ho trovato online :-) Ma completerà gli argomenti della riga di comando da programmi come apt, grep, ecc ....
Kyle Brandt,

5
Il completamento delle schede di bash è molto simile al vecchio sistema di completamento delle schede di zsh. Questa è una delle idee copiate da zsh a bash (ce ne sono altre copiate da bash a zsh). Puoi usare gli script di completamento scritti per bash in zsh, eseguendo "bashcompinit" e quindi usando i comandi "complete" e / o "compgen" all'interno di zsh - questo è possibile perché la funzionalità bash è un sottoinsieme di quello disponibile in zsh e quindi può essere emulato. Quindi non c'è motivo di passare a bash perché un comando viene fornito con un completamento bash.
Phil P
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.