/bashtron

Bashtron - a web framework for bash

Primary LanguageShell

Attention: this README is not up to date, a new one is being worked on.

In the mean time, please see https://github.com/redrock9/bashlord.com as an example project that works with the the latest version of bashtron.

bashtron - a web framework for bash

Bashtron is a web framework for the bash programming language. It leverages the nodejs http library to host bash scripts that function as controllers and generate html.

How does it work?

The ServerGenerator script in the root of the project generates javascript code for the nodejs runtime. The generated code will run a server that listens on the port that is defined in the port variable in the current shell. You can add routes to the server by appending the route command.

Dependencies

Except for depending on nodejs, bashtron is written in pure bash and the generated javascript exclusively uses the native nodejs libraries. So no node_modules with the weight of ten cities for this framework!

Examples

You can see this framework in action at bashlord.com (GitHub link)

Creating a server that routes all requests to a script

    source $BASH_LIB/bashtron/ServerGenerator.bash 

{ 
    port=3000 # Define the port that the server should listen on.

    ##
    # Generate javascript code.
    # The --default option tells the bashtron where to route any undefined routes to.
    # The --execute flag tells bashtron which script to execute
    # The --get-params option tells bashtron to append the GET parameters of the request
    # to the parameters of your script in the form [-g [ param_name ] [ param_value ]]
    # a request to /?hi=bye would result in the parameters -g hi bye for example.

    server route --default --execute SomeScript.bash --get-params

} | node # Pipe into node for execution

More advanced routing

source $BASH_LIB/bashtron/ServerGenerator.bash

{
    port=3000
  
    ##
    # The --default flag tells bashtron what page to use for non defined routes.
    # The --execute flag tells bashtron what script to execute for this route.
    # When not using the --default flag, the first argument after `route` is used
    # as the url path. So route somewhere will result in a route for /somewhere.
    # The --split-routes splits the remainder of the url string into command line arguments
    # at every forward slash, so /somewhere/else/route will result in the execution of 
    # SubRouter.bash with the arguments else route (else is $1, route is $2)
    # the last route tells bashtron to serve the files in the dir 'public' at the
    # url path '/public'
    server\ 
      route --default --execute Index.bash\
      route somewhere --execute SubRouter.bash --split-routes\
      route public --static public
} | node