Y a-t-il des langages qui compilent pour Bash?

J'aime et déteste écrire Bash. J'aime que c'est donc simplifié pour fonctionner sur des fichiers et travailler avec des processus (je suis d'accord avec cette question populaire que c'est bien mieux à cet égard que Python, Ruby, etc.), mais je déteste la syntaxe, en particulier autour des conditionnels, des boucles,etc.

(c'est subjectif, mais je trouve cela à la fois déroutant et ennuyeux. Par exemple $var lors de la lecture, mais var lors de l'écriture; les Écritures échouent silencieusement s'il y a des espaces autour =; les doubles crochets dans ifs lors de l'utilisation de regexp; doubles points-virgules parfois et simples points-virgules autres; etc.)

En tant que grand fan de CoffeeScript, qui compile en JS, je me suis demandé: y a-t-il des langages qui ont l'esthétique/syntaxe de langages comme Python/Ruby/CoffeeScript mais qui compilent et s'exécutent comme Bash au lieu d'un de ces autres runtimes?

Par exemple, j'aimerais pouvoir écrire principalement-Bash avec une syntaxe un peu plus simple:

$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

Ceci est un exemple super artificiel, et la syntaxe est un strawman (principalement inspiré de CoffeeScript mais en gardant les notions essentielles de bash des commandes de première classe, séparées des variables, et du typage lâche).

Quoi Qu'il en soit, juste une question et une matière à réflexion. J'aimerais aimer pouvoir écrire mes scripts dans quelque chose de plus agréable que Bash. = ) Merci!

46
demandé sur Community 2012-04-20 05:55:09

8 réponses

Vous pouvez également essayer Batsh, qui est un DSL (langage spécifique au domaine ) qui compile un langage de syntaxe C à Bash (et Windows Batch).

17
répondu BYVoid 2015-12-15 16:30:56

Depuis que j'ai initialement posé cette question, deux projets ont été publiés qui attaquent ce problème et font un très bon travail. Les deux réimplémentent beaucoup/la plupart des outils Unix dans des runtimes plus conviviaux pour la programmation.

Plumbum est implémenté en Python et semble assez solide:

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

ShellJS est implémenté sur le nœud.js et aussi l'air joli bon:

Https://github.com/arturadib/shelljs

Développements Passionnants! Je suis impatient de les essayer. Si vous avez déjà, ce serait formidable d'entendre vos expériences dans les commentaires. Merci!

15
répondu Aseem Kishore 2012-10-09 17:39:00

Le problème est que toute la sémantique basée sur les chaînes de Bash est si horriblement brisée, il serait assez difficile de faire quelque chose comme CoffeeScript pour Bash.

Puisque vous n'avez probablement pas besoin d'interopérabilité au niveau des fonctions pour appeler des fonctions écrites en Bash, il vaut mieux utiliser quelque chose de complètement différent. Perl est proche de Bash en étant méchant et plein de raccourcis et de syntaxe étrange, mais sa sémantique est principalement sonore. Python est moins confortable pour des choses telles que processus de lancement mais est beaucoup mieux pour la programmation des systèmes généraux, propre et facile à entretenir. Python a d'excellentes bibliothèques et modules pour tout; Perl encore mieux.

5
répondu Miguel Pérez 2012-06-06 12:08:45

Bish est une autre option:

Https://github.com/tdenniston/bish

Script Shell avec une sensation moderne.

Bish est un langage léger créé pour introduire les scripts shell dans le 21ème siècle. Il donne aux programmeurs le confort de la syntaxe moderne mais compile à Bash, ce qui entraîne une bonne portabilité (dans la mesure où Bash est portable).

5
répondu masukomi 2015-09-11 18:45:56

J'ai essayé tous les ci-dessus (résultats) et a commencé à powscript.

Différences powscript vs les outils ci-dessus,

  • préprocesseur extrêmement portable (100% bash)
  • soldes entre coffeescript et bash
  • compilateur/runtime portable tout-en-un sans tracas, écrit en bash
  • transpiler lâche: bash en ligne toujours possible
4
répondu coderofsalvation 2016-11-25 13:18:01

Vous pouvez essayer ZSh, il a beaucoup d'améliorations pour rendre votre script shell plus lisible.

Http://www.zsh.org

2
répondu Jaromil 2012-09-12 12:24:24

Vous pouvez jeter un oeil dans nscript, dans lequel vous pouvez écrire des scripts shell en utilisant javascript. Toutes les constructions bash communes sont là, comme les codes de sortie, les tuyaux, les redirections de flux, l'expansion des arguments, le globbing, l'invite, etc.

1
répondu mweststrate 2015-01-27 19:54:57

J'ai récemment développé un langage appelé BashClass, qui est Orientée Objet, a vérification de type et permettre à multi-dimensionnelle tableaux. La syntaxe du langage est inspirée par différents langages de programmation.

Voici un exemple sur la façon dont une classe List est implémentée (exemple complet ici):

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];
    }
}

Les Classes et les tableaux multidimensionnels dans BashClass sont convertis en tableaux associatifs Bash 4.4. La langue est à sa première sortie et est open source sur Github. N'hésitez pas à contirbute et suggérer des fonctionnalités.

1
répondu CMPS 2017-11-20 22:40:30