in node/toolrunner.ts [156:197]
private _getCommandString(options: IExecOptions, noPrefix?: boolean): string {
let toolPath: string = this._getSpawnFileName();
let args: string[] = this._getSpawnArgs(options);
let cmd = noPrefix ? '' : '[command]'; // omit prefix when piped to a second tool
let commandParts: string[] = [];
if (process.platform == 'win32') {
// Windows + cmd file
if (this._isCmdFile()) {
commandParts.push(toolPath);
commandParts = commandParts.concat(args);
}
// Windows + verbatim
else if (options.windowsVerbatimArguments) {
commandParts.push(`"${toolPath}"`);
commandParts = commandParts.concat(args);
}
else if (options.shell) {
commandParts.push(this._windowsQuoteCmdArg(toolPath));
commandParts = commandParts.concat(args);
}
// Windows (regular)
else {
commandParts.push(this._windowsQuoteCmdArg(toolPath));
commandParts = commandParts.concat(args.map(arg =>this._windowsQuoteCmdArg(arg)));
}
}
else {
// OSX/Linux - this can likely be improved with some form of quoting.
// creating processes on Unix is fundamentally different than Windows.
// on Unix, execvp() takes an arg array.
commandParts.push(toolPath);
commandParts = commandParts.concat(args);
}
cmd += commandParts.join(' ');
// append second tool
if (this.pipeOutputToTool) {
cmd += ' | ' + this.pipeOutputToTool._getCommandString(options, /*noPrefix:*/true);
}
return cmd;
}