Domanda

Non sono nuovo a *nix, tuttavia ultimamente ho passato molto tempo al prompt.La mia domanda è: quali sono i vantaggi dell'utilizzo di KornShell (ksh) o Bash Shell?Dove sono le insidie ​​​​dell'utilizzo dell'uno rispetto all'altro?

Cercando di capire dal punto di vista di un utente, piuttosto che puramente tramite script.

È stato utile?

Soluzione

Bash.

Le varie implementazioni UNIX e Linux hanno diverse implementazioni a livello sorgente di ksh, alcune delle quali sono veri ksh, alcune delle quali sono implementazioni pdksh e alcune delle quali sono solo collegamenti simbolici a qualche altra shell che ha una personalità "ksh".Ciò può portare a strane differenze nel comportamento di esecuzione.

Almeno con bash puoi essere sicuro che si tratti di un'unica base di codice e tutto ciò di cui devi preoccuparti è quale versione (di solito minima) di bash è installata.Avendo eseguito molti script praticamente su tutti gli UNIX moderni (e non così moderni), la programmazione su bash è più affidabile e coerente nella mia esperienza.

Altri suggerimenti

La differenza tra Kornshell e Bash è minima.Ci sono alcuni vantaggi l'uno rispetto all'altro, ma le differenze sono minime:

  • BASH è molto più semplice impostando un prompt che visualizzi la directory corrente.Fare lo stesso in Kornshell è da hacker.
  • Kornshell ha array associativi e BASH no.Ora, l'ultima volta che ho usato gli array associativi è stato...Fammi pensare...Mai.
  • Kornshell gestisce un po' meglio la sintassi del loop.Di solito è possibile impostare un valore in un ciclo Kornshell e averlo disponibile dopo il ciclo.
  • Bash gestisce l'ottenimento dei codici di uscita dalle pipe in modo più pulito.
  • Kornshell ha il print comando che è decisamente migliore di echo comando.
  • Bash ha completamenti con tabulazioni.Nelle versioni precedenti
  • Kornshell ha il r comando History che mi consente di rieseguire rapidamente i comandi più vecchi.
  • Kornshell ha la sintassi cd old new che sostituisce old con new nella tua directory e nei CD laggiù.È comodo quando ti trovi in ​​una directory chiamata /foo/bar/barfoo/one/bar/bar/foo/bar e devi fare il cd /foo/bar/barfoo/two/bar/bar/foo/bar In Kornshell puoi semplicemente farlo cd one two e farla finita.In BASH, dovresti farlo cd ../../../../../two/bar/bar/foo/bar.

Sono un vecchio tipo di Kornshell perché ho imparato Unix negli anni '90, e quella era la shell preferita a quei tempi.Posso usare Bash, ma a volte mi sento frustrato perché per abitudine utilizzo alcune funzionalità minori di Kornshell che BASH non funziona e non funziona.Quindi, quando possibile, imposto Kornshell come predefinito.

Tuttavia, ti dirò di imparare BASH.Bash è ora implementato sulla maggior parte dei sistemi Unix e su Linux, e ci sono semplicemente più risorse disponibili per apprendere BASH e ottenere aiuto rispetto a Kornshell.Se hai bisogno di fare qualcosa di esotico in BASH, puoi andare su Stackoverflow, pubblicare la tua domanda e riceverai una dozzina di risposte in pochi minuti - e alcune di esse saranno anche corrette!.

Se hai una domanda su Kornshell e la pubblichi su Stackoverflow, dovrai aspettare che qualche vecchio hacker del passato come me si svegli dal suo pisolino prima di ottenere una risposta.E dimentica di ricevere qualsiasi risposta se quel giorno serviranno il budino nella casa di riposo.

BASH è semplicemente la shell preferita ora, quindi se devi imparare qualcosa, potresti anche scegliere ciò che è popolare.

Sono un veterano dei gusci di mais, quindi sappi che parlo da quella prospettiva.

Tuttavia, mi sono trovato a mio agio con Bourne Shell, ksh88 e ksh93 e per la maggior parte so quali funzionalità sono supportate e in quali.(Dovrei saltare ksh88 qui, poiché non è più ampiamente distribuito.)

Per l'uso interattivo, prendi quello che si adatta alle tue esigenze.Sperimentare.Mi piace poter utilizzare la stessa shell per uso interattivo e per la programmazione.

Sono passato da ksh88 su SVR2 a tcsh, a ksh88sun (che ha aggiunto un significativo supporto per l'internazionalizzazione) e ksh93.Ho provato Bash e l'ho odiato perché ha appiattito la mia storia.Poi ho scoperto shopt -s lithist e tutto andava bene.(IL lithist l'opzione assicura che le nuove linee siano conservate nella cronologia dei comandi.)

Per la programmazione della shell, consiglierei seriamente ksh93 se desideri un linguaggio di programmazione coerente, una buona conformità POSIX e buone prestazioni, poiché molti comandi Unix comuni possono essere disponibili come funzioni integrate.

Se vuoi la portabilità usa almeno entrambi.E assicurati di avere una buona suite di test.

Ci sono molte sottili differenze tra le shell.Consideriamo ad esempio la lettura da una pipe:

b=42 && echo one two three four |
    read a b junk && echo $b

Ciò produrrà risultati diversi in shell diverse.Il guscio del korn fa scorrere le condutture da dietro in avanti;l'ultimo elemento della pipeline viene eseguito nel processo corrente.Bash non supportava questo comportamento utile fino alla versione 4.x e, anche in quel caso, non è l'impostazione predefinita.

Un altro esempio che illustra la coerenza:IL echo comando stesso, che è stato reso obsoleto dalla divisione tra BSD e SYSV unix, e ciascuno ha introdotto la propria convenzione per non stampare i caratteri di fine riga (e altri comportamenti).Il risultato di ciò può ancora essere visto in molti script 'configure'.

Ksh ha adottato un approccio radicale e ha introdotto il file print comando, che in realtà supporta entrambi i metodi (the -n opzione da BSD e il finale \c carattere speciale da SYSV)

Tuttavia, per la programmazione di sistemi seri, consiglierei qualcosa di diverso da una shell, come Python, Perl.Oppure fai un ulteriore passo avanti e utilizza una piattaforma come Puppet, che ti consente di osservare e correggere lo stato di interi gruppi di sistemi, con un buon controllo.

La programmazione delle shell è come nuotare in acque inesplorate, o peggio.

La programmazione in qualsiasi linguaggio richiede familiarità con la sua sintassi, le sue interfacce e il suo comportamento.La programmazione della shell non è diversa.

Non ho esperienza con ksh, ma ho usato sia bash che zsh.Preferisco zsh a bash per il suo supporto per il globbing di file molto potente, i modificatori di espansione variabile e il completamento più rapido delle schede.

Ecco una breve introduzione: http://friedcpu.wordpress.com/2007/07/24/zsh-the-last-shell-youll-ever-need/

Questa è una specie di battaglia tra Unix e Linux.La maggior parte se non tutte le distribuzioni Linux hanno bash installato e ksh opzionale.La maggior parte dei sistemi Unix, come Solaris, AIX e HPUX, hanno ksh come predefinito.

Personalmente utilizzo sempre ksh, adoro il completamento vi e utilizzo praticamente Solaris per tutto.

Per gli script, utilizzo sempre ksh perché si liscia trabocchetti.

Ma trovo bash più comodo per l'uso interattivo.Per me il emacs le associazioni dei tasti e il completamento delle tabulazioni sono i vantaggi principali.Ma si tratta principalmente di forza dell'abitudine, non di problemi tecnici ksh.

@foxxtrot

In realtà, la shell standard è la Bourne shell (sh). /bin/sh su Linux è in realtà bash, ma se stai mirando a script multipiattaforma, è meglio attenersi alle funzionalità della Bourne shell originale o scriverla in qualcosa di simile perl.

La mia risposta sarebbe "scegline uno e impara come usarlo".Sono entrambi gusci decenti;bash probabilmente ha più fronzoli, ma entrambi hanno le caratteristiche di base che vorrai.bash è più universalmente disponibile in questi giorni.Se usi sempre Linux, mantienilo e basta.

Se stai programmando, cercare di attenersi al semplice "sh" per la portabilità è una buona pratica, ma con bash così ampiamente disponibile al giorno d'oggi quel piccolo consiglio è probabilmente un po' antiquato.

Scopri come utilizzare il completamento e la cronologia della shell;leggi la manpage di tanto in tanto e prova a imparare alcune cose nuove.

Per prima cosa, bash ha il completamento tramite tabulazione.Questo da solo è sufficiente per farmi preferire a ksh.

Conchiglia Z ha una buona combinazione delle caratteristiche uniche di ksh con le cose interessanti fornite da bash, oltre a molte altre cose in più.

Disponibile nella maggior parte dei sistemi UNIX, ksh è conforme agli standard, progettato in modo chiaro e completo.Penso che i libri, aiuti in KSH siano sufficienti e chiari, specialmente il libro di O'Reilly.Bash è una massa.Lo tengo come shell di accesso root per Linux solo a casa.

Per l'uso interattivo, preferisco zsh su Linux/UNIX.Eseguo script in zsh, ma testerò la maggior parte dei miei script, tuttavia funzioni in AIX ksh.

Bash è il punto di riferimento, ma è principalmente perché puoi essere ragionevolmente sicuro che sia installato su ogni * nix là fuori.Se hai intenzione di distribuire gli script, usa Bash.

Sfortunatamente non posso davvero affrontare le effettive differenze di programmazione tra le shell.

Bash è lo standard per Linux.
La mia esperienza è che è più facile trovare aiuto per bash che per ksh o csh.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top