in src/main/java/org/apache/commons/exec/launcher/VmsCommandLauncher.java [68:128]
private File createCommandFile(final CommandLine cmd, final Map<String, String> env)
throws IOException {
final Path path = Files.createTempFile("EXEC", ".TMP");
final File script = path.toFile();
script.deleteOnExit();
try (PrintWriter out = new PrintWriter(Files.newBufferedWriter(path, Charset.defaultCharset()))) {
// add the environment as global symbols for the DCL script
if (env != null) {
final Set<Entry<String, String>> entries = env.entrySet();
for (final Entry<String, String> entry : entries) {
out.print("$ ");
out.print(entry.getKey());
out.print(" == "); // define as global symbol
out.println('\"');
String value = entry.getValue();
// Any embedded " values need to be doubled
if (value.indexOf('\"') > 0) {
final StringBuilder sb = new StringBuilder();
for (int i = 0; i < value.length(); i++) {
final char c = value.charAt(i);
if (c == '\"') {
sb.append('\"');
}
sb.append(c);
}
value = sb.toString();
}
out.print(value);
out.println('\"');
}
}
final String command = cmd.getExecutable();
if (cmd.isFile()) {// We assume it is it a script file
out.print("$ @");
// This is a bit crude, but seems to work
final String[] parts = StringUtils.split(command, "/");
out.print(parts[0]); // device
out.print(":[");
out.print(parts[1]); // top level directory
final int lastPart = parts.length - 1;
for (int i = 2; i < lastPart; i++) {
out.print(".");
out.print(parts[i]);
}
out.print("]");
out.print(parts[lastPart]);
} else {
out.print("$ ");
out.print(command);
}
final String[] args = cmd.getArguments();
for (final String arg : args) {
out.println(" -");
out.print(arg);
}
out.println();
}
return script;
}