GNU/Linux >> Linux Esercitazione >  >> Linux

Quali sono le differenze fondamentali tra il mainstream * nix Shells??

Chiuso . Questa domanda deve essere più focalizzata. Attualmente non accetta risposte.

Vuoi migliorare questa domanda? Aggiorna la domanda in modo che si concentri su un solo problema modificando questo post.

Chiuso 6 anni fa.


Migliora questa domanda

Quali sono le differenze fondamentali tra le shell *NIX tradizionali e quali scenari potrebbero indurti a usarne una rispetto all'altra? Capisco che parte di ciò probabilmente dipende dalle preferenze dell'utente, ma ho sempre usato Bash e sono interessato a sapere dove potrebbe essere utile un'altra shell.

Inoltre, c'è un impatto sugli script di shell scritti dall'utente quando vengono eseguiti sotto una shell o un'altra o si tratta semplicemente di cambiare la shell nella parte superiore del file? Il mio istinto dice che non è così facile.

Risposta accettata:

Per l'uso interattivo, ci sono due contendenti principali, Bash e zsh, più lo sbandato tcsh e il nuovo arrivato fish.

  • Bash è la shell ufficiale del progetto GNU e la shell predefinita sulla maggior parte delle distribuzioni Linux. Su altri Unice che non vengono forniti con una shell interattiva decente come parte dell'installazione di base, penso che Bash sia ciò che le persone tendono a scegliere, in un ciclo di auto-rinforzo "Bash è ovunque, quindi lo userò anch'io". Vedi anche Perché Bash è ovunque? (con molte informazioni storiche).

  • Zsh ha quasi tutte le funzionalità di Bash e molte altre (utili!). Il suo principale svantaggio è essere meno noto, il che in pratica significa che è meno probabile trovarlo già installato su un sistema configurato da qualcun altro e c'è meno documentazione di terze parti al riguardo. Vedi anche Quali funzionalità di zsh usi?, Quali funzionalità sono presenti in zsh e mancano in Bash o viceversa?, Quali sono le differenze pratiche tra Bash e Zsh?.

  • Tcsh era una volta (fino all'inizio degli anni '90) la shell con le migliori funzionalità interattive, come il suo predecessore csh. Ciò lo ha reso popolare per l'uso interattivo (ma non per lo scripting). Zsh ha raggiunto tcsh e abbastanza rapidamente è migliorato ulteriormente, e Bash ha raggiunto (con il completamento programmabile) nei primi anni 2000, mentre tcsh ha fatto a malapena progressi negli ultimi 15 anni. Quindi ci sono poche ragioni per imparare tcsh ora.

  • Il pesce cerca di essere più pulito dei suoi predecessori. Ha alcune caratteristiche pulite (sintassi più semplice, colorazione della sintassi sulla riga di comando) ma ne mancano altre (qualunque cosa non piaccia all'autore). La comunità ittica è molto più piccola persino di quella di zsh, il che rende gli effetti ancora più acuti.

Per lo scripting, ci sono diversi linguaggi che potresti voler scegliere come target, a seconda di quanto vuoi che i tuoi script siano portabili.

  • Tutto ciò che pretende di essere simile a Unix ha una shell derivata da Bourne come /bin/sh . Ci sono ancora alcune unità commerciali in giro dove /bin/sh non è conforme a POSIX.

  • Quasi tutti gli Unix attualmente in esecuzione hanno un sh eseguibile che sia almeno conforme almeno a POSIX.2-1992 e di solito almeno a POSIX:2001 alias Single Unix v3. Questa shell potrebbe risiedere in una directory diversa come /usr/bin/posix o /usr/xpg6/bin . Esistono anche livelli di emulazione POSIX per quasi tutti i sistemi sufficientemente potenti da supportarlo, il che lo rende un bersaglio interessante.

  • Molti sistemi unix hanno ksh93, che offre alcune funzioni molto utili che mancano a POSIX sh (array, array associativi, glob estesi (*(foo) , @(foo|bar) , …), glob nulli (~(N)foo* ), …). Inizialmente Ksh era un software commerciale (divenne gratuito nel 2000, dopo che alcune abitudini si erano stabilite), e molti unice gratuiti (Linux, *BSD) presero l'abitudine di fornire solo un clone gratuito molto più vecchio (pdksh) privo di molte di queste utili funzionalità . Pdksh viene ora sostituito da mksh al di fuori di OpenBSD, ma anche mksh non riesce a implementare tutte le funzionalità di ksh93. Oggi non puoi contare sul fatto che ksh93 sia disponibile ovunque, specialmente su Linux, dove Bash è la norma.

  • Bash è sempre disponibile su Linux (tranne alcune varianti incorporate) e spesso su altri Unice. Ha la maggior parte delle utili funzioni di ksh93, anche se a volte con una sintassi diversa.

  • Zsh ha la maggior parte delle funzioni utili di ksh93 e Bash. La sua sintassi principale è più pulita ma incompatibile con Bourne. Fatta eccezione per macOS, non contare sul fatto che zsh sia disponibile su un sistema che non hai installato.

  • Per script più avanzati, puoi passare a Perl o Python. Questi linguaggi hanno strutture di dati adeguate, funzionalità di manipolazione del testo decenti, combinazione di processi e meccanismi di comunicazione decenti e tonnellate di librerie disponibili. La maggior parte dei sistemi Unix li ha, in bundle con il sistema operativo o installati dall'amministratore (perché ci sono così tanti script Perl e Python là fuori che è un sistema raro che non ne ha almeno uno per ciascuno).

Correlati:inverti i risultati per i cicli "for in * do"?
Linux
  1. Debian vs Ubuntu:quali sono le differenze?

  2. Quali sono i separatori di parole Readline?

  3. pfSense vs Netgear router:quali sono le differenze principali?

  4. Fedora vs Ubuntu:quali sono le differenze principali?

  5. Quali sono le differenze tra le principali distribuzioni Linux? me ne accorgerò?

Cassandra vs MongoDB - Quali sono le differenze?

Terraform vs Kubernetes:quali sono le differenze

Quali sono le differenze tra cPanel e WHM?

useradd vs. adduser:quali sono le differenze?

Qual è la differenza tra &> e >&in bash?

Quali sono le differenze tra rdesktop e xfreerdp?