Skip to content

mariapaulinar/bashful

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

67 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

bashful

Parse and execute bash in javascript without doing any IO so you can use your own IO backend.

build status

example

var bash = require('bashful');
var fs = require('fs');

var sh = bash({
    env: process.env,
    spawn: require('child_process').spawn,
    write: fs.createWriteStream,
    read: fs.createReadStream
});

var s = sh.createStream();
process.stdin.pipe(s).pipe(process.stdout);
$ echo hello
hello
$ echo $PWD
/home/substack/projects/bashful
$ beep boop
No command "beep" found
$ echo beep boop | wc -c
10
$ false || true && echo bleep
bleep
$ echo ONE TWO THREE > outfile.txt
$ cat outfile.txt
ONE TWO THREE
$ wc -c < outfile.txt
14

methods

var bash = require('bashful')

var sh = bash(opts)

Create a new bashful shell sh from opts:

  • opts.env - environment variables to use
  • opts.write(file) - return a writable stream for file
  • opts.read(file) - return a readable stream for file
  • opts.spawn(cmd, args, opts) - return a process object or a stream
  • opts.custom - array of builtin keywords to delegate to opts.spawn()

sh.createStream()

Create a duplex stream for the interpreter. Write commands, read command output.

sh.eval(expr)

Return a duplex stream for a single command expression expr. expr can have all the fanciness of pipes and control characters but won't split commands on newlines like sh.createStream() will.

events

bash.on('spawn', function (cmd, args, opts) {})

Just before a command is executed, this event fires.

bash.on('read', function (file) {})

Just before a file is read, this event fires.

bash.on('write', function (file) {})

Just before a file is written to, this event fires.

status

The scope of this module is to only support the internally-defined bash functions you can list by typing help in a real bash shell.

implemented

  • &&, ;, ||, |, <, >
  • $?
  • echo [-neE] [arg ...]
  • eval [arg ...]
  • false
  • filename [arguments]
  • true

not yet implemented

  • job_spec [&]
  • (( expression ))
  • . filename [arguments]
  • :
  • [ arg... ]
  • [[ expression ]]
  • alias [-p] [name[=value] ... ]
  • bg [job_spec ...]
  • bind [-lpvsPVS] [-m keymap] [-f filen>
  • break [n]
  • builtin [shell-builtin [arg ...]]
  • caller [expr]
  • case WORD in [PATTERN [| PATTERN]...)>
  • cd [-L|[-P [-e]]] [dir]
  • command [-pVv] command [arg ...]
  • compgen [-abcdefgjksuv] [-o option] >
  • complete [-abcdefgjksuv] [-pr] [-DE] >
  • compopt [-o|+o option] [-DE] [name ..>
  • continue [n]
  • coproc [NAME] command [redirections]
  • declare [-aAfFgilrtux] [-p] [name[=va>
  • dirs [-clpv] [+N] [-N]
  • disown [-h] [-ar] [jobspec ...]
  • enable [-a] [-dnps] [-f filename] [na>
  • exec [-cl] [-a name] [command [argume>
  • exit [n]
  • export [-fn] [name[=value] ...] or ex>
  • fc [-e ename] [-lnr] [first] [last] o>
  • fg [job_spec]
  • for NAME [in WORDS ... ] ; do COMMAND>
  • for (( exp1; exp2; exp3 )); do COMMAN>
  • function name { COMMANDS ; } or name >
  • getopts optstring name [arg]
  • hash [-lr] [-p pathname] [-dt] [name >
  • help [-dms] [pattern ...]
  • history [-c] [-d offset] [n] or hist>
  • if COMMANDS; then COMMANDS; [ elif C>
  • jobs [-lnprs] [jobspec ...] or jobs >
  • kill [-s sigspec | -n signum | -sigs>
  • let arg [arg ...]
  • local [option] name[=value] ...
  • logout [n]
  • mapfile [-n count] [-O origin] [-s c>
  • popd [-n] [+N | -N]
  • printf [-v var] format [arguments]
  • pushd [-n] [+N | -N | dir]
  • pwd [-LP]
  • read [-ers] [-a array] [-d delim] [->
  • readarray [-n count] [-O origin] [-s>
  • readonly [-aAf] [name[=value] ...] o>
  • return [n]
  • select NAME [in WORDS ... ;] do COMM>
  • set [-abefhkmnptuvxBCHP] [-o option->
  • shift [n]
  • shopt [-pqsu] [-o] [optname ...]
  • source filename [arguments]
  • suspend [-f]
  • test [expr]
  • time [-p] pipeline
  • times
  • trap [-lp] [[arg] signal_spec ...]
  • type [-afptP] name [name ...]
  • typeset [-aAfFgilrtux] [-p] name[=va>
  • ulimit [-SHacdefilmnpqrstuvx] [limit>
  • umask [-p] [-S] [mode]
  • unalias [-a] name [name ...]
  • unset [-f] [-v] [name ...]
  • until COMMANDS; do COMMANDS; done
  • variables - Names and meanings of so>
  • wait [id]
  • while COMMANDS; do COMMANDS; done
  • { COMMANDS ; }

About

parse and execute bash without doing any IO

Resources

License

Stars

Watchers

Forks

Packages

No packages published