From b4207581043b931339962f8436ef290da43b6f5e Mon Sep 17 00:00:00 2001 From: Roel van Uden Date: Sat, 24 Jan 2015 13:26:44 +0100 Subject: [PATCH] Fix for proper command line parsing. --- src/batch.js | 24 +++++++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) diff --git a/src/batch.js b/src/batch.js index dacfaac..25bac97 100644 --- a/src/batch.js +++ b/src/batch.js @@ -26,6 +26,28 @@ module.exports = function(args, done) { }); }; +/** + * Splits the value into arguments. + * @param {string} value + * @returns {Array.} + */ +function _split(value) { + var inQuote = false; + var pieces = []; + var previous = 0; + for (var i = 0; i < value.length; i += 1) { + if (value.charAt(i) === '"') { + inQuote = !inQuote; + } + if (!inQuote && value.charAt(i) === ' ') { + pieces.push(value.substring(previous, i).match(/^"?(.*)"?$/)[1]); + previous = i + 1; + } + } + pieces.push(value.substring(previous)); + return pieces; +} + /** * Parses the configuration or reads the batch-mode file for tasks. * @private @@ -45,7 +67,7 @@ function _tasks(config, batchPath, done) { if (err) return done(err); var map = []; data.split(/\r?\n/).forEach(function(line) { - var lineConfig = _parse(process.argv.concat(line.split(' '))); + var lineConfig = _parse(process.argv.concat(_split(line))); lineConfig.args.forEach(function(address) { if (!address) return; map.push({address: address, config: lineConfig});