function run(name, directories, options, argv) {
	if (Array.isArray(name)) {
		return new Promise((resolve, reject) => {
			promiseSeries(name, n => {
				return run(n, directories, options, argv);
			})
				.then(() => resolve())
				.catch(reject);
		});
	}

	if (getAllAliases(options)[name]) {
		return runAlias(name, directories, options, argv);
	}
	return runTask(name, directories, options, argv);
}
@param {string|string[]} name
@param {string[]} directories
@param {Object} options
@param {Object} argv
@returns {Promise}