xsh
Some random NodeJS helper functions for shell execution
Install
npm install xsh --save-dev
Usage
const xsh = require("xsh");
xsh.exec("echo hello");
API
Promise
You can set a custom Promise
with:
xsh.Promise = require("bluebird");
Or set to the native Promise
with:
xsh.Promise = null;
xsh.mkCmd(["echo", "hello"]);
xsh.mkCmd("echo", "hello");
Both return the string "echo hello"
.
xsh.exec(shellCommand, [options], [callback] );
Use shelljs exec
to execute shellCommand
in async
mode.
Arguments
-
shellCommand
- can be combination of multiple strings and arrays. Array is joined with " "
into strings. All final strings are joined with " "
.
-
options
- optional options
- If it's either
true
or false
, it sets silent
flag for output to console. - It can also be an object that's passed to NodeJS exec.
- For example, it can be
{silent: true}
- This can be the first, last, or second to last (if last is the callback) argument.
-
callback
- optional, if provided, it will be called as follows:
callback( code !== 0 ? new Error("...") : undefined, { stdout, stderr } )
error.output
is set to { stdout, stderr}
.
error.code
is set to code
.
Returns
{
then, catch, promise, child, stdout, stderr
}
Where:
then
- a wrapper function for calling the promise.then
catch
- a wrapper function for calling the promise.catch
promise
- rejects with the error or resolves with { stdout, stderr }
child
- the child from exec
stdout
and stderr
- alias to child.stdout
and child.stderr
exec Examples
xsh.exec("echo hello").then(r => { console.log("result", r.stdout); });
xsh.exec("pwd", {cwd: "/tmp"}).then(r => { console.log("result", r.stdout)})
xsh.exec("echo hello", (r) => {console.log("result", r.stdout)})
shellCommand
as a combination of strings and array of strings:
xsh.exec("echo", ["hello", "world"], {silent: false})
Would run shell command: echo hello world
xsh.envPath.addToFront(path, [env]);
Add path
to the front of process.env.PATH
. If it already exists, then it is moved to the front.
If you don't want to operate on process.env
you can pass in a second argument that's either an object or a string that's the path to change.
xsh.envPath.addToEnd(path, [env]);
Add path
to the end of process.env.PATH
. If it already exists, then it is moved to the end.
If you don't want to operate on process.env
you can pass in a second argument that's either an object or a string that's the path to change.
xsh.envPath.add(path, [env]);
If path
doesn't exist in process.env.PATH
then it's added to the end.
If you don't want to operate on process.env
you can pass in a second argument that's either an object or a string that's the path to change.
An instance of shelljs.
const xsh = require("xsh");
xsh.$.cd("/tmp");