asyncSudo = (args, allowFail, dryRun) => {
  console.log(">", args.join(" "));
  if (!dryRun)
    return new Promise(function (resolve, reject) {
      let child = sudo(args, { cachePassword: true });
      //var child = sudo(['ls'], {cachePassword: true})
      child.stdout.on("data", function (data) {
        console.log(data.toString());
      });
      child.stderr.on("data", function (data) {
        console.error(data.toString());
      });
      child.on("exit", function (data) {
        if (data !== 0 && !allowFail) reject(data);
        else resolve();
      });
    });
}
Execute os  sudo command with args
@param args - args
@param allowFail - if true allows to fail of sudo
@param dryRun - if true it does not execute sudo but displays commands (to test purposes)
@returns {Promise<unknown>}