Skip to content

transpiler written in bash: painless shellscript, indentbased, coffee for the shell with hipster-sparkles v1 BETA LANDED πŸŽ‰πŸŽ‰πŸŽ‰πŸŽ‰ thanks fcard!

License

Notifications You must be signed in to change notification settings

coderofsalvation/powscript

Folders and files

NameName
Last commit message
Last commit date
May 28, 2020
Sep 18, 2020
Sep 3, 2018
Sep 28, 2020
Sep 19, 2020
Sep 19, 2020
Jun 2, 2018
Feb 16, 2016
Sep 21, 2016
Mar 24, 2017
Jun 7, 2020
Sep 28, 2020
Sep 28, 2020

Repository files navigation

Travis build status

write shellscript in a powful way!

Usage

$ wget "https://raw.githubusercontent.com/coderofsalvation/powscript/master/powscript" -O /usr/local/bin/powscript && chmod 755 /usr/local/bin/powscript
$ powscript myscript.pow                          # run directly
$ powscript -c myscript.pow > myscript            # output bashscript
$ powscript -c --to sh myscript.pow > myscript.sh # output sh-script (experimental)

Wiki

Example

#!/usr/bin/env powscript
require_cmd 'echo'
require_env 'TERM'

error(msg exitcode)
  echo "error: $msg"
  if set? $exitcode
    exit $exitcode

run(@args -- foo)
  if empty? foo
    error "please pass --foo <string>" 1
  echo $args[@] "$foo universe!!"
  echo "HOME=$HOME"

run $@

Output:

$ powscript -c foo.pow -o foo.bash
$ ./foo.bash hello --foo powful
hello powful universe!
HOME=/home/yourusername

Check a json example here and here for more examples

Features

Examples

Interactive mode (experimental)

Put this line in your .inputrc:

"\C-p" "powscript --interactive\n"

Then hitting ctrl-p in your console will enter powscript mode:

hit ctrl-c to exit powscript, type 'edit' to launch editor, and 'help' for help
> each(line)
>   echo line=$line
> run()
>   tail -2 ~/.kanban.csv | mappipe each
> run
line=1,foo,bar,flop
line=2,foo2,bar2,flop2
>

POSIX /bin/sh compatibility

Powscript can produce 'kindof' POSIX /bin/sh-compatible output by removing bashisms, by introducing the --sh flag:

$ powscript --c foo.pow -o foo.bash
$ powscript --to sh --c foo.pow -o foo.sh

This however, is experimental, as well as the standalone bash2sh converter:

$ cat foo.bash | powscript --to sh  > foo.sh

NOTE: remove bashisms manually using docs/tools like bashism guide or checkbashisms The general rule for POSIX sh-output is: don't write bashfeatures in powscript

Debug your powscript syntax

See FAQ

OSX users

OSX might protest since it isn't quite GNU focused. Please run these commands after installing:

$ brew install bash
$ brew install coreutils gnu-sed grep gawk --default-names
$ echo 'export PATH=/usr/local/opt/coreutils/libexec/gnubin:$PATH' >> ~/.bashrc
$ sed -i 's|#!/bin/bash|#!/usr/local/bin/bash|g' powscript

Live expansion inside editor

HINT: use live expansion inside vim. Put the lines below in .vimrc and hit 'p>' in normal/visual mode to expand powscript to bash

vmap p> :!PIPE=2 powscript -c<CR>
nmap p> ggVG:!PIPE=2 powscript -c<CR>

About

transpiler written in bash: painless shellscript, indentbased, coffee for the shell with hipster-sparkles v1 BETA LANDED πŸŽ‰πŸŽ‰πŸŽ‰πŸŽ‰ thanks fcard!

Topics

Resources

License

Stars

Watchers

Forks

Sponsor this project

Packages

No packages published

Languages