shell-escape-tag, but with a much smaller install size
An ES6 template tag which escapes parameters for interpolation into shell commands
$ npm install shell-escape-tag
import shell from 'shell-escape-tag'
let filenames = glob('Holiday Snaps/*.jpg')
let title = 'Holiday Snaps'
let command = shell`compress --title ${title} ${filenames}`
console.log(command) // compress --title 'Holiday Snaps' 'Holiday Snaps/Pic 1.jpg' 'Holiday Snaps/Pic 2.jpg'
This module exports an ES6 tagged-template function which escapes (i.e. quotes) its parameters for safe inclusion in shell commands. Parameters can be strings, arrays of strings, or nested arrays of strings, arrays and already-processed parameters.
The exported function also provides two helper functions which respectively escape and preserve their parameters and protect them from further processing.
Signature: template: string → command: string
let filenames = [ 'foo bar', "baz's quux" ]
let title = 'My Title'
let command = shell`command --title ${title} ${filenames}`
console.log(command) // command --title 'My Title' 'foo bar' 'baz'"'"'s quux'
Takes a template literal
and escapes any interpolated parameters. null
and undefined
values are ignored.
Arrays are flattened and their elements are escaped and joined with a space.
All other values are stringified i.e. false
is mapped to "false"
etc. Parameters that have been escaped
with shell.escape
or preserved with shell.preserve
are passed through verbatim.
Signature: ...any → Object
let params = [ 'foo bar', "baz's quux" ]
let command1 = shell.escape('command', params)
let command2 = shell`command ${params}`
console.log(command1) // command 'foo bar' 'baz'"'"'s quux'
console.log(command2) // command 'foo bar' 'baz'"'"'s quux'
Flattens, compacts and escapes any parameters which haven't
already been escaped or preserved, joins the resulting elements
with a space, and wraps the resulting string in an object which
is passed through verbatim when passed as a direct or nested
parameter to shell
, shell.escape
,
or shell.preserve
.
Aliases: protect, verbatim
Signature: ...any → Object
let params = [ 'foo bar', shell.preserve("baz's quux") ]
let command1 = shell.escape('command', params)
let command2 = shell`command ${params}`
console.log(command1) // command 'foo bar' baz's quux
console.log(command2) // command 'foo bar' baz's quux
Flattens, compacts and preserves any parameters which haven't already
been escaped or preserved, joins the resulting elements with a space,
and wraps the resulting string in an object which is passed through
verbatim when passed as a direct or nested parameter to
shell
, shell.escape
, or
shell.preserve
.
- any-shell-escape - Escape and stringify an array of arguments to be executed on the shell
- execa - A better
child_process
- shell-tag - Run shell commands inline in JavaScript with ES6 template strings
Copyright © 2015-2018 by chocolateboy.
This is free software; you can redistribute it and/or modify it under the terms of the Artistic License 2.0.