GithubHelp home page GithubHelp logo

gottaboy / batsh Goto Github PK

View Code? Open in Web Editor NEW

This project forked from batsh-dev-team/batsh

0.0 2.0 0.0 598 KB

A language that compiles to Bash and Windows Batch

Home Page: http://batsh.org

Makefile 0.63% JavaScript 0.53% OCaml 84.87% Standard ML 3.56% Shell 4.30% Batchfile 6.10%

batsh's Introduction

Batsh

Batsh is a simple programming language that compiles to Bash and Windows Batch. It enables you to write your script once runs on all platforms without any additional dependency.

Both Bash and Batch are messy to read and tricky to write due to historical reasons. You have to spend a lot of time learning either of them and write platform-dependent code for each operating system. I have wasted lots of time in my life struggling with bizarre syntaxes and unreasonable behaviors of them, and do not want to waste any more.

If you happen to be a maintainer of a cross-platform tool which relies on Bash on Linux/Mac and Batch on Windows as "glue code", and found it painful to "synchronize" between them, you would definitely like to try Batsh.

How to get it

The easiest way

Try it online: http://batsh.org

Install from OPAM

Batsh is implemented in OCaml and managed by OPAM.

  1. Install OPAM. See instructions.
  2. Switch to the latest version (or at least 4.00.1) of OCaml by running opam switch.
  3. Install Batsh: opam install batsh

Build from source

You have to install OCaml (version 4.00.1 or higher) development environment before compiling Batsh from source code, and follow steps below:

  1. Download source code of Batsh from releases or clone with git.
  2. Uncompress source code tarball.
  3. make
  4. make install
  5. Run: batsh

Dependencies

If there is any missing dependency, you can install them by running opam install ocp-build core ounit dlist cmdliner

  • ocp-build: Build framework.
  • core: An industrial strength alternative to OCaml's standard library.
  • ounit: Unit test framework.
  • dlist: A purely functional list-like data structure supporting O(1) concatenation.
  • cmdliner: Command line interfaces parser.

Syntax

The syntax of Batsh is C-based (derived from C programming language). If you have learned C, Java, C++ or JavaScript, Batsh is quite easy for you.

Assignment

a = 1;
b = "string";
c = [1, 2, "str", true, false];

Expression

a = 1 + 2;
b = a * 7;
c = "Con" ++ "cat";
d = c ++ b;

Command

// On UNIX
output = ls();
// On Windows
output = dir();
// Platform independent
output = readdir();

// Test existence
ex = exists("file.txt");

If condition

a = 3;
if (a > 2) {
  println("Yes");
} else {
  println("No");
}

Loop

// Fibonacci
n = 0;
i = 0;
j = 1;
while (n < 60) {
  k = i + j;
  i = j;
  j = k;
  n = n + 1;
  println(k);
}

Function

v1 = "Global V1";
v2 = "Global V2";
function func(p) {
  v1 = "Local " ++ p;
  global v2;
  v2 = "V2 Modified.";
}
func("Var");

Recursion

function fibonacci(num) {
  if (num == 0) {
    return 0;
  } else if (num == 1) {
    return 1;
  } else {
    return (fibonacci(num - 2) + fibonacci(num - 1));
  }
}
println(fibonacci(8));

Syntax Highlighting

Built-in functions

In order to make script cross-platform, Batsh provided some "built-in" functions that will compile to platform-dependent code. It is assumed that Bash script runs on Linux or Mac OS and Batch script runs on Windows (XP or higher), which means Cygwin or wine are not supported.

print(text, ...)

Prints a text string to console without a newline.

println(text, ...)

Prints a text string to console with a new line (LF for bash, CRLF for batch).

call(path, arg, ...)

Runs command from path through shell.

bash(rawStatement)

Put rawStatement into compiled code for Bash. Ignore for Windows Batch.

batch(rawStatement)

Put rawStatement into compiled code for Windows Batch. Ignore for Bash.

readdir(path)

Equals to ls and dir /w.

exists(path)

Test existence of given path.

Command Line Usage

NAME
       batsh - A language that compiles to Bash and Windows Batch.

SYNOPSIS
       batsh COMMAND ...

COMMANDS
       bash
           Compile to Bash script.

       batsh
           Format source file.

       winbat
           Compile to Windows Batch script.

OPTIONS
       --help[=FMT] (default=pager)
           Show this help in format FMT (pager, plain or groff).

       --version
           Show version information.

Why not Python/Ruby/Node.js/Lua

Yes you can use any of them as platform-independent glue code. But there are several disadvantages:

  1. None of them is preinstalled on all platforms (including Windows).
  2. Functionalities like process piping are not convenient to use.
  3. Hard to integrate with existing code written in Bash or Batch.

Those reasons are why I developed Batsh.

License

MIT

Contributors

batsh's People

Contributors

byvoid avatar mirez avatar kvu787 avatar therzok avatar nixola avatar saiki-k avatar

Watchers

James Cloos avatar gottaboy avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.