075173185d263726789bd69cd829073e066126ce
				
			
			
		
	cscript
A simple yet powerful script to run C code like a scripting language. Supports multiple files and the inclusion of libraries.
Table of Contents
Installation
Run the following shell command to install cscript:
sudo curl -L 'https://git.nobrain.org/r4/cscript/raw/branch/master/cscript' -o /usr/local/bin/cscript && sudo chmod a+rx /usr/local/bin/cscript
You can uninstall it by running:
sudo rm -f /usr/local/bin/cscript
Example (simple)
example-simple.c
#!cscript -s
#include <stdio.h>
int main(int argc, char *argv[])  {
	printf("Program name: %s\n", argv[0]);
	if (argc <= 1) {
		printf("No arguments given\n");
	} else {
		for (size_t i = 1; i < argc; i++) {
			printf("Argument %zu: %s\n", i, argv[i]);
		}
	}
}
Indirectly (shebang not required)
Run without arguments
cscript example-simple.c
Pass arguments to the C program
cscript example-simple.c -- arg1 arg2 arg3
Pass arguments to the compiler
cscript example-simple.c -Ofast
Directly (compiler args passed via shebang)
First we make the file executable: chmod +x example-simple.c
Run without arguments
./example-simple.c
Arguments are now passed to the C program directly
./example-simple.c arg1 arg2 arg3
Compiler arguments are passed via the shebang
At the beginning of the C file, write:
#!cscript -s -Ofast
The -s flag puts the "interpreter" in shebang mode.
Any arguments following -s in the shebang line are interpreted as further source files or compiler arguments.
Example (with GTK4)
For this one you'll need the GTK4 development libraries. Install them via sudo apt install libgtk-4-dev on anything Debian/Ubuntu.
example-gtk4.c
#!cscript -s $(pkg-config --cflags --libs gtk4)
#include <gtk/gtk.h>
static void
print_hello (GtkWidget *widget,
             gpointer   data)
{
  g_print ("Hello World\n");
}
static void
activate (GtkApplication *app,
          gpointer        user_data)
{
  GtkWidget *window;
  GtkWidget *button;
  GtkWidget *box;
  window = gtk_application_window_new (app);
  gtk_window_set_title (GTK_WINDOW (window), "Window");
  gtk_window_set_default_size (GTK_WINDOW (window), 200, 200);
  box = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0);
  gtk_widget_set_halign (box, GTK_ALIGN_CENTER);
  gtk_widget_set_valign (box, GTK_ALIGN_CENTER);
  gtk_window_set_child (GTK_WINDOW (window), box);
  button = gtk_button_new_with_label ("Hello World");
  g_signal_connect (button, "clicked", G_CALLBACK (print_hello), NULL);
  g_signal_connect_swapped (button, "clicked", G_CALLBACK (gtk_window_destroy), window);
  gtk_box_append (GTK_BOX (box), button);
  gtk_widget_show (window);
}
int
main (int    argc,
      char **argv)
{
  GtkApplication *app;
  int status;
  app = gtk_application_new ("org.gtk.example", G_APPLICATION_FLAGS_NONE);
  g_signal_connect (app, "activate", G_CALLBACK (activate), NULL);
  status = g_application_run (G_APPLICATION (app), argc, argv);
  g_object_unref (app);
  return status;
}
We make the C file executable again: chmod +x example-gtk4.c
Now just run the script; library inclusion is already handled via the shebang
./example-gtk4.c
When not using the shebang (i.e. executing the file indirectly), we need to specify the libraries manually
cscript example-gtk4.c $(pkg-config --cflags --libs gtk4)
Example (multiple files)
example-multi-base.c
#!cscript -s example-multi-ext.c
#include <stdio.h>
extern const char *external_string;
int main()  {
	printf("%s\n", external_string);
}
example-multi-ext.c
const char *external_string = "Hello, world!";
Now we just make example-multi-base.c executable: chmod +x example-multi-base.c
Again, all the details are handled by the shebang argument
./example-multi-base.c
We can also just run multiple C files indirectly
cscript example-multi-base.c example-multi-ext.c
Description
				A simple yet powerful script to run C code like a scripting language. Supports multiple files and the inclusion of libraries.
						
						
						
					Languages
				
				
								
								
									Shell
								
								100%