2012-04-20 5 views
41

Ich liebe und hasse es, Bash zu schreiben. Ich liebe, dass es so gestrafft für den Betrieb auf Dateien und die Arbeit mit Prozessen (ich stimme mit this popular question, dass es viel besser in dieser Hinsicht als Python, Ruby, etc. ist), aber ich hasse die Syntax, insbesondere um Conditionals, SchleifenGibt es Sprachen, die zu Bash kompilieren?

usw.

(Dies ist subjektiv, aber ich finde es sowohl verwirrend und ärgerlich Eg $var beim Lesen, aber var beim Schreiben;. schreibt unbemerkt fehlschlagen, wenn es Räume um =, die doppelten eckigen Klammern in ifs wenn regexp verwendet wird; doppelte Semikolons manchmal und einzelne Semikolons andere; usw.)

Als ein großer Fan von CoffeeScript, die c ompiles zu JS, ich frage mich: Gibt es Sprachen, die die Ästhetik/Syntax von Sprachen wie Python/Ruby/CoffeeScript haben, die aber kompiliert und als Bash statt einer dieser anderen Laufzeiten ausgeführt werden?

z. Ich würde gerne mit nur ein bisschen einfacher Syntax meist-Bash in der Lage sein zu schreiben:

$AGGREGATE_FILENAME = 'allfiles.txt' 

if not exists $AGGREGATE_FILENAME 
    touch $AGGREGATE_FILENAME 

for $file in files/* 
    cat $file >> $AGGREGATE_FILENAME 

switch $1 
    case 'test' 
     run-tests 
     echo 'Tests finished!' 
    case 'deploy' 
     echo 'Packaging...' 
     mv foo bar/ 
     deploy-bar 

Dies ist ein super konstruiertes Beispiel, und die Syntax ist ein strawman (meist aus Coffee inspiriert, aber den wesentlichen Bash Vorstellungen halten von erstklassigen Befehlen, getrennt von Variablen und losen Typisierung).

Wie auch immer, nur eine Frage und Denkanstoß. Ich würde Liebe in der Lage sein, meine Skripte in etwas schöner als Bash zu schreiben. =) Danke!

+3

Haben Sie darüber nachgedacht, Perl anzusehen? Es hat Datei-Globs, prägnante Existenztests ('' 'print 'existiert' if (-e $ filename);' '') und führt die Ausführung aus. – tjdett

+0

Ich habe Perl noch nie probiert. Es kam mir in den Sinn, als ich diese Frage schrieb, aber ich nahm immer an, dass Perl auch voller unverständlicher Syntax war. = D Ich überprüfe es - danke! –

+2

Es kann sein. Glücklicherweise müssen Sie das meiste nicht wirklich selbst verwenden. –

Antwort

14

Da ich ursprünglich diese Frage gestellt, zwei Projekte freigegeben wurden, die dieses Problem angreifen und einen ziemlich guten Job machen. Beide implementieren viele/die meisten Unix-Tools in programmierfreundlichere Laufzeiten.

Plumbum ist in Python implementiert und sieht ziemlich solide:

http://plumbum.readthedocs.org/en/latest/index.html

ShellJS auf Node.js implementiert und sieht auch ziemlich gut:

https://github.com/arturadib/shelljs

Spannende Entwicklungen! Ich freue mich darauf, sie auszuprobieren. Wenn Sie bereits haben, wäre es toll, Ihre Erfahrungen in den Kommentaren zu hören. Vielen Dank!

5

Das Problem ist, dass die ganze Strings-basierte Semantik von Bash ist so schrecklich gebrochen, es wäre ziemlich schwierig, etwas wie CoffeeScript for Bash zu tun.

Da Sie wahrscheinlich keine Funktionsebenen-Interoperabilität benötigen, um Funktionen aufzurufen, die in Bash geschrieben sind, sollten Sie etwas völlig anderes verwenden. Perl steht Bash sehr nahe und ist voller Abkürzungen und seltsamer Syntax, aber seine Semantik ist meistens solide. Python ist weniger für Dinge wie das Starten von Prozessen geeignet, aber es ist viel besser für die allgemeine Systemprogrammierung, sauber und einfach zu warten. Python hat großartige Bibliotheken und Module für alles; Perl noch besser.

+1

Ich glaube wirklich nicht, dass Perl das ist, wonach dieser Typ sucht, wenn man bedenkt, dass er weniger "Lärm" in seinen Skripts haben will. –

2

Vielleicht möchten Sie ZSh ausprobieren, es hat viele Verbesserungen, um Ihr Shell-Skript lesbarer zu machen.

http://www.zsh.org

1

Sie vielleicht einen Blick in nscript nehmen wollen, in dem Sie Shell-Skripte mit Hilfe von Javascript zu schreiben. Alle gemeinsamen bash Konstruktionen sind in, wie Beendigungscodes, Rohre, Strom Umleitungen, argument Expansion, Globbing, prompt usw.

4

Bish ist eine weitere Option:

https://github.com/tdenniston/bish

Shell scripting mit a modernes Gefühl.

Bish ist eine leichtgewichtige Sprache, die geschaffen wurde, um Shell Scripting in das 21. Jahrhundert zu bringen. Es gibt Programmierern den Komfort moderner Syntax, kompiliert jedoch zu Bash, was zu einer guten Portabilität führt (insofern Bash tragbar ist).

2

Ich habe versucht, alle oben genannten (results) und begann powscript.

Unterschiede powscript vs Werkzeuge oben

  • extrem portable Vorprozessor (100% bash)
  • Salden zwischen Coffeescript und bash
  • Hasslefree tragbare All-in-one-Datei-Compiler/Laufzeit, geschrieben in bash
  • loser transpiler: inline bash immer möglich
+0

Ich benutze tatsächlich powscript und mag es wirklich. Ich würde nur sagen, dass der Dolmetscher ausführlicher sein sollte. –

0

Ich habe vor kurzem eine Sprache namens BashClass entwickelt, die Objektorientierte ist, hat Typ überprüfen und ermöglichen mehrdimensionale Arrays. Die Sprachsyntax ist von verschiedenen Programmiersprachen inspiriert.

Hier ist ein Beispiel dafür, wie eine List Klasse implementiert wird (Full Beispiel here):

class List extends Object { 
    var Object[] data = new Object[]; 
    var int size = 0; 
    constructor List(){ 
     super_constructor(); 
    } 

    function void add(var Object object) { 
     data[size] = object; 
     size = size + 1; 
    } 

    function void pop() { 
     if(size == 0) { 
      exception("Cannot remove element from an empty list"); 
     } 
     size = size - 1; 
     data[size] = null; 
    } 

    function int size() { 
     return size; 
    } 

    function Object get(var int index) { 
     if(index < 0 || index >= size) { 
      exception("Cannot access element out of bound"); 
     } 
     return data[index]; 
    } 
} 

Klassen und mehrdimensionale Arrays in BashClass zu Bash 4.4 assoziativen Arrays umgewandelt werden. Die Sprache ist bei ihrer ersten Veröffentlichung und Open Source unter Github. Fühlen Sie sich frei, Eigenschaften zu contrirbute und vorzuschlagen.

Verwandte Themen