handleshells
v0.1.2
Published
Runs shell commands using handlebars templates.
Downloads
23
Maintainers
Readme
handleshells
allows for easy calling of command line utilities by processing
command line arguments with handlebars.
It provides:
- Automatic escaping
- Promise-based execution
- Useful template helpers
Example
The following example uses ffprobe to extract metadata from a video file.
const handleshells = require('handleshells')
// A source video file. Notice that the path contains
// a space, which will be automatically escaped.
const videoFile = '/Video Files/video.mov'
// The ffprobe command line. {{ videoFile }} will be substituted.
const command = 'ffprobe -v quiet -print_format json -show_streams {{ videoFile }}'
// Run the command. A Promise will be returned.
handleshells.exec( command, { videoFile } )
.then( ( result ) => {
// Since the command returns JSON to stdout,
// we can access the data directly.
assert.isObject( result.data )
} )
API
Functions
compile
Compile a command and return the escaped command line.
Example
assert.equal(
handleshells.compile( 'touch {{ file }}', { file: 'foo.txt' } ),
'touch foo.txt'
)
exec
Compiles and then executes a command.
Result
- pid : The process id of spawned command.
- exitCode : The status of the command's exit.
- stdout : The output of the command, usually String.
- stderr : The errors from the command, usually String.
- data :
stdout
as JSON, if applicable. - dataerr :
stderr
as JSON, if applicable.
Example
handleshells.exec( 'echo {{ text }}', { text: 'Hello, world!'} )
.then( ( result ) => {
assert.equal( result.stdout, 'Hello, world!\n' )
} )
Template Helpers
args
Spread objects as command line options.
const options = {
a: 'foo',
bar: 'baz qux'
}
assert.equal(
handleshells.compile('{{ args options }}', { options } ),
"-a foo --bar 'baz qux'"
)
join
Join strings together into paths.
const dir = 'bar'
, file = 'foo.txt'
assert.equal(
handleshells.compile('{{ join "/tmp" dir file }}', { dir, file } ),
"/tmp/bar/foo.txt"
)