script method

Future script(
  1. String script, {
  2. List<String>? arguments,
  3. Encoding? encoding,
  4. String? workingDirectory,
  5. Map<String, String>? environment,
  6. bool includeParentEnvironment = true,
  7. bool silent = false,
  8. bool noPrompt = false,
  9. bool returnCode = false,
})

Implementation

Future<dynamic> script(
  String script, {
  List<String>? arguments,
  dart_convert.Encoding? encoding,
  String? workingDirectory,
  Map<String, String>? environment,
  bool includeParentEnvironment = true,
  bool silent = false,
  bool noPrompt = false,
  bool returnCode = false,
}) async {
  if (!script.endsWith('\n')) {
    script += '\n';
  }
  arguments ??= [];
  if (workingDirectory != null) {
    workingDirectory = std_misc.pathExpand(workingDirectory);
  }
  workingDirectory ??= dart_io.Directory.current.absolute.path;
  if (!noPrompt) {
    //print('[$workingDirectory]\n<script>\n$script</script>');
    dart_io.stderr.write('[$workingDirectory]\n<script>\n$script</script>\n');
  }
  String? tmpFile;
  String command;
  if (useUnixShell) {
    String b64 = dart_convert.base64.encode(dart_convert.utf8.encode(script));
    command = 'echo $b64 | base64 -d | bash /dev/stdin';
    for (int i = 0; i < arguments.length; i++) {
      command += ' "${arguments[i]}"';
    }
  } else {
    tmpFile = std_misc.installBinaryToTempDir(
      Uint8List.fromList(
        dart_io.SystemEncoding().encode(
          dart_io.Platform.isWindows
              ? script.replaceAll('\n', '\r\n')
              : script,
        ),
      ),
      suffix: '.cmd',
    );
    command = '"$tmpFile"';
    for (int i = 0; i < arguments.length; i++) {
      command += ' "${arguments[i]}"';
    }
  }
  //print(command);
  dynamic result;
  try {
    result = await run(
      command,
      encoding: encoding,
      workingDirectory: workingDirectory,
      environment: environment,
      includeParentEnvironment: includeParentEnvironment,
      silent: silent,
      noPrompt: true,
      returnCode: returnCode,
    );
  } finally {
    if (tmpFile != null) {
      dart_io.File(tmpFile).deleteSync();
    }
  }
  return result;
}