C99sh: Τρέξτε κώδικα C σαν να ήταν script

Η μαγική γραμμή

#!/usr/bin/env scriptlang

στην αρχή ενός εκτελέσιμου αρχείου το κάνει ένα script στην γλώσσα scriptlang. και αυτό ήταν. Αλλά αυτό δεν θα δουλέψει με γλώσσες που θέλουν μεταγλώττιση. Και αυτό είναι κρίμα, αλλά με το c99sh αυτό μπορεί να γίνει. Το πρόγραμμα θα γίνει compile και θα τρέξει. Ένας compiler είναι τόσο γρήγορος στις μέρες μας.

Εγκατάσταση

Θα κατεβάσουμε το αρχείο c99sh από το repository και θα το βάλουμε κάπου στο path και θα το κάνουμε εκτελέσιμο. Προαιρετικά θα φτιάξουμε ένα αρχείο ~/.c99shrc στον κατάλογο χρήστη ή στον κατάλογο που είναι το πηγαίο αρχείο. Η πρώτη γραμμή περιέχει τα flags και ακολουθούν κάποια include αρχεία. Στο repository υπάρχει πληθώρα παραδειγμάτων.

Πλέον μπορούμε να φτιάξουμε ένα script σαν το παρακάτω:

#!/usr/bin/env c99sh
int main()
{
    puts("Hello, world!");
}

Χρήση

Προσωπικά το χρησιμοποιώ αντί για κάποιο Makefile ή το cmake για μικρά προγράμματα ή για ένα γρήγορο TDD. Η παραλλαγή που χρησιμοποιώ είναι η παρακάτω

#if 0
exec c99sh "$0" "$@"
#endif

#include <stdio.h>

int main(int argc, char *argv[])
{
    for (int i = 1; i < argc; ++i) {
        printf("Hello, %s!\n", argv[i]);
    }
}

με τον τρόπο αυτό το αρχείο και μπορεί να γίνει compile και να τρέξει σαν script. Στο repository υπάρχει και ένας τρόπος να τρέξεις κάποιο test όταν το τρέχεις σαν script.

Ιστορικό

Η ιδέα προέκυψε από το βιβλίο 21st Century C’s section “Compiling C Programs via Here Document” (available online) του Ben Klemens. Και εκεί αναφέρθηκε το repository. Κοιτάζοντας το κοίταξα να βρω τρόπους να βελτιωθεί το workflow και βοήθησα λίγο στο κεφάλαιο Shebang Tricks. Το μετέφερα εδώ μετά από αίτηση ενός φίλου και ελπίζω να το βρείτε χρήσιμο.

5 Likes