execr
cross platform exec
Reason
Primary use is within npm scripts to execute cross platform commands.
In particular environment variables; at the time of writing this to use an environment variable on linux/unix platforms is $NAME where on windows it is %name% (case insensitive)
Any bugs, improvements or features, please leave a ticket or a merge request!
License
MIT (see LICENSE)
Usage
$ execr --help Usage: execr --prefix=ARG env syntax prefix --suffix=ARG env syntax suffix -v, --verbose print exec-ed stdout/stderr -s, --silent exit gracefully on error -f, --file command is a script to be run -h, --help display this screen --version display version
Command may be provided as single string or broken if following an argument separator (note separator works as expected in linux/unix as seen in the last possibilities shown here)
$ execr -- echo hello world$ execr echo hello world$ execr echo "hello world"$ execr "echo hello world"$ execr "echo \"hello world\""$ execr -- "echo hello world"$ execr echo -- hello world$ execr -- ls -AlhG
If it is a single command consider using the file flag to denote this. The change is purely for efficiency.
Do:
$ execr -f -- ls
Don't:
$ execr -f -- ls | grep package
NOTE: this may appear to work correctly but consider that it will be evaluated
{execr -f -- ls} | grep package
to prevent this useexecr -f -- "ls | grep package"
which will now error due to incorrect usage of the file flag
Show output with verbose mode
$ execr -v -- echo hirunning: [ 'echo', 'hi' ]stdout:hi
Prevent errors from affecting exit codes
$ execr -v -- foobarrunning: [ 'foobar' ]Command failed: /bin/sh -c foobar/bin/sh: foobar: command not found $ execr -v -s --foobarrunning: [ 'foobar' ]Command failed: /bin/sh -c foobar/bin/sh: foobar: command not foundstderr:/bin/sh: foobar: command not found$
Change prefix and suffix for environment variables
ENV=node execr --prefix=% --suffix=% -v -- echo %env%running: [ 'echo', '%env%' ]stdout:node
NOTE: prefix nd suffix values are regular expressions so don't forget to escape special characters
ENV=node execr --prefix="" --suffix="\\\$" -v -- echo "ENV\$"running: [ 'echo', 'ENV$' ]stdout:node
Lint
Linted with jshint (not lint, even if lint command is run!)
$ npm run lint--or--$ npm run hint