2009-06-01 3 views
27

Io uso bash e lo faccio da oltre un decennio, ma occasionalmente mi chiedo se ci siano stati nuovi sviluppi significativi nel mondo delle shell Linux.Una shell Linux migliore?

Alcuni anni fa Microsoft ha rilasciato PowerShell, che sembrava molto interessante. C'è qualche innovazione comparabile nelle shell Linux?

+9

Quali caratteristiche ti manca in bash vs sono disponibili in altre shell che consideri innovative? Ancora più importante, vedi caratteristiche che pensi possano aiutare a fare ciò per cui è stato scritto? Per esempio. dal mio punto di vista bash è un'interfaccia a riga di comando per accedere alle risorse del sistema operativo, da quel punto di vista quale funzionalità ti manca? – stefanB

+0

Forse è un modo di rimanere all'interno della filosofia Unix di usare piccoli strumenti che fanno cose specifiche molto bene (al contrario di grandi strumenti che fanno tutto male). –

+2

questo è un barattolo di vermi .. aprilo con cura .. – sybreon

risposta

6

È possibile eseguire PowerShell su Linux tramite Pash. Utilizza Mono nel modo in cui PowerShell utilizza .NET.

8

Darei un'occhiata a zsh o fishshell.

+0

Una considerazione su zsh e fishshell è che non siamo autorizzati a utilizzarli al lavoro. E io non sembro essere solo. Quindi, anche se sono belli, non sono preziosi quanto bash sul posto di lavoro, a meno che tu non possa scegliere tu stesso. –

+5

Sembra che cambiare le conchiglie sia facile. Non è necessario averlo come shell di login, è sufficiente eseguirlo una volta effettuato l'accesso. – stimms

6

Penso che il "guscio originale migliorato" sia ksh93. bash è venuto alla luce in un momento in cui il codice sorgente ksh era proprietario; se ksh fosse stato open source allora, non sarebbe stato ritenuto necessario avere una nuova shell (anche se con la FSF non si sa mai). ksh merita di essere studiato, soprattutto per la sua capacità di essere esteso attraverso i moduli C, ma non è una chiara vittoria su bash. il completamento automatico di bash è chiaramente superiore, il che potrebbe essere sufficiente per rendere bash una vittoria generale. In ogni caso bash e ksh hanno fatto uno sforzo sostanziale per convergere, quindi le differenze sono minori.

L'altra shell interessante è zsh, che tenta di essere tutto ciò che è ksh mentre include anche csh. Dal momento che non ho mai visto alcun punto o uso per csh, non sono la persona giusta per difendere zsh. Indicherò una incompatibilità insolita: per impostazione predefinita, in zsh una variabile $varsempre si espande in un singolo token, anche se contiene spazi. Questo comportamento è incompatibile con tutte le altre shell derivate da sh, ed è occasionalmente inopportuno, ma in realtà ha molto più senso dell'originale, e salva parecchie quotazioni.

csh è stata la prima shell ad avere il controllo del lavoro, ma nella mia mente (e i suoi successori) è stata sostituita da bash e ksh. Non è mai stato divertente scrivere script in.

Infine, ci sono molti piccoli gusci progettati per i dischetti di salvataggio (!) E altri ambienti spartani, ma sembra che tu abbia poco interesse per quelli.

(In materia di innovazione, dovrei aggiungere che più della metà degli script che ho usato come script di shell ora sono gli script Lua. Altri potrebbero dire lo stesso per Python o Ruby, o indietro nel tempo, Perl o Quindi penso che la vera innovazione sia la migrazione dalla shell per l'interazione programmabile alla riga di comando)

+1

ksh (o pdksh) è molto facile da hackerare, infatti è possibile collegarlo allo stesso editor di riga e alla libreria di completamento automatico che usi bash. Quello che non otterrete è tutte le estensioni GNU oltre a POSIX (cioè gli array associativi in ​​bash 4.0). Con qualsiasi shell, è facile cambiare parser/grammatica per usare un linguaggio moderno sulla riga di comando. Se usi google per "linguaggio di programmazione blu", vedrai quanto è facile cadere in bash. –

3

IIRC, Powershell è orientato agli oggetti, mentre la maggior parte delle shell e utility UNIX operano sul testo. A tal proposito, Squirrel Shell potrebbe interessarti. Non l'ho mai usato, però.

20

Ti rendi conto che bash 4 è stato rilasciato di recente con un carico di nuove funzionalità e aggiunte linguistiche?

  • opzioni Shell globstar (**/foo) fa una ricerca ricorsiva, dirspell correzioni di errori di battitura durante espansione di percorso.
  • Array associativi, stringhe di mappa alle stringhe, anziché solo numeri a stringhe.
  • L'opzione di shell autocd consente di modificare le directory semplicemente digitando il percorso della directory invece di dover inserire cd nella parte anteriore.
  • Coprocesses
  • &>> e |& operatori di reindirizzamento che reindirizzano entrambi stdout e stderr
  • Carichi di nuovi elementi builtins esistenti per migliorare convenienza scripting.

Partenza:

3

Se ’ re disposto a perdi la compatibilità con sh, potresti usare un linguaggio di scripting come Python o Tcl come shell. rlwrap può essere molto utile se l'interprete non fornisce la modifica delle righe, la cronologia dei comandi, il completamento, ecc.

Una filosofia per quanto riguarda le shell è che devono essere utilizzate principalmente per collegare processi con file (here is one page that espouses that approach). Detto questo, le persone hanno scritto un software straordinariamente complesso che li utilizza.

7

Una delle funzioni meno propagandate di Bash (e di molte altre shell) è la possibilità di scrivere i propri file personali e avere la shell li esegue come built-in.

Diciamo che si scrive il caricabile 'su' .. e si desidera lavorare in questo modo:

on node 123 run some command 
on class nodes run some command 
on all nodes run some command 

... ecc ..

È possibile seguire semplici esempi su come scrivere un caricabile, quindi attivare come bash costruito in via abilitare -f/path/to/caricabili loadable_name

quindi, nel nostro caso, abilitare -f/opt/bash/loadables/a su

... nella tua base e ce l'hai

Quindi, se vuoi che bash interpreti in modo nativo la tua nuova lingua spiffy, dovresti scrivere un loadable chiamato 'use' o 'switch_to', quindi modificare il parser per caricare una grammatica/runtime diversa se una certa variabile d'ambiente era impostato.

cioè .:

#/bin/bash 

switch_to my-way-cool-language 

funkyfunc Zippy(int p) [[ 
    jive.wassup(p) ]] 

La maggior parte delle persone sono non intenzione di voler incidere il loro guscio, però. Volevo sottolineare che esistono strutture per prendere Bash e farlo nel modo che preferisci, senza fare troppo con il core code.

Vedere/path-to-bash-source/examples/loadables, potresti essere in grado di farlo volare dove lavori, dal momento che stai ancora utilizzando Bash.

+2

Un bell'esempio del potere di questo è il [Lua Bash] di René Rebe (http://freshmeat.net/projects/luabash/), che è un loadable che definisce un built-in 'luabash' che esegue Lua e alcune infrastrutture per aggiungendo ulteriori builtin, & c. L'[esempio] (http://svn.exactcode.de/t2/trunk/misc/luabash/example/example.sh) dà un'idea di cosa sta succedendo. –

+0

@Charles - Questo è davvero un esempio eccellente! –

2

Le conchiglie non sono molto più innovative rispetto allo Scheme Schell. Tutta la potenza di Scheme combinata con la possibilità di eseguire comandi Unix e un interprete di awk incorporato (scritto in Schema, ovviamente). L'unico inconveniente è che è necessario un minimo di patching da compilare su Linux a 64 bit.

Non è esattamente Bourne-shell, ma è diverso. Certo, devi imparare Scheme - bonus!