atlas-interactive-shell
Runs a shell command interactively, abstracts useful callbacks as opposed to manually listening for events.
install
npm install --save atlas-interactive-shell
why
Sometimes you need to run a command and programmatically interact with the standard input when prompted with a message. The implementation looks something like this:
const spawn = ;const child = ;const onDone = { // only run this once}childstdoutchildstderrchildchildchild
I would rather keep a clean house and not litter my codebase with this event and stream stuff. So, I tried to come up with a decent API to abstract it away.
examples
passing command and opts
The first argument is a command, the second argument is spawn opts and is entirely optional.
const Shell = ;const cmd = "ls && mkdir -p new-dir/new-sub-dir && ls new-dir";const opts = cwd: __dirname ...otherSpawnOpts;const shell = cmd opts;
onDone callback
This is called only once, whether the command exits normally or with an error:
...shell
onData callback
Captures stderr and stdout, allowing you to reply with an error or a message, respectively:
...shell
logging
The spawned command will not log anything unless you call the log
method, in which case all stderr and stdout will be piped to the parent process:
...shell
chaining everything
All of the methods can be chained, since they just return the instance:
...shell
caveats
Don't pass unsanitized user input into this function.