runCommand method
Implementation
Future<void> runCommand(List<String> commands, Map<String, dynamic> scripts, Map vars) async {
for (var command in commands) {
var regex = RegExp("[^\\s\'']+|\'[^\']*\'|'[^']*'");
var regexVar = RegExp(r'\$([a-zA-Z0-9]+)');
late String commandExec;
try {
commandExec = scripts[command] as String;
} catch (e) {
commandExec = '';
output.error('command "$command" not found');
return;
}
for (var match in regexVar.allMatches(commandExec)) {
if (match.groupCount != 0) {
var variable = match.group(0)?.replaceFirst('\$', '');
if (variable != null && vars.containsKey(variable)) {
commandExec = commandExec.replaceAll(match.group(0) ?? '', vars[variable] ?? '');
}
}
}
for (final item in commandExec.split('&')) {
final matchList = regex
.allMatches(item)
.map((v) => v.group(0)!)
.toList()
.map<String>((e) => (e.startsWith('\$') ? vars[e.replaceFirst('\$', '')] ?? e : e))
.toList();
await callProcess(matchList);
}
}
}