Мне нужно передать текстовый аргумент в stdin команды, запущенной с Apache Commons Exec (для любопытных команда gpg и аргумент - ключевая фраза в хранилище ключей; gpg не имеет аргумента для предоставления кодовой фразы явно, только чтобы принять его из stdin).
Кроме того, мне нужно это для поддержки Linux и Windows.
В оболочке script я бы сделал
cat mypassphrase|gpg --passphrase-fd
или
type mypassphrase|gpg --passphrase-fd
но тип не работает в Windows, поскольку он не является исполняемым, а командой, встроенной в интерпретируемую команду (cmd.exe).
Код, который не работает (по вышеуказанной причине), приведен ниже. Чтобы создать всю оболочку, это слишком уродливо, я искал более элегантное решение. К сожалению, есть некоторые проблемы несовместимости между библиотекой BouncyCastle и PGP, поэтому я не могу использовать полностью программное решение в (очень короткое) время, которое у меня есть.
Спасибо заранее.
CommandLine cmdLine = new CommandLine("type");
cmdLine.addArgument(passphrase);
cmdLine.addArgument("|");
cmdLine.addArgument("gpg");
cmdLine.addArgument("--passphrase-fd");
cmdLine.addArgument("0");
cmdLine.addArgument("--no-default-keyring");
cmdLine.addArgument("--keyring");
cmdLine.addArgument("${publicRingPath}");
cmdLine.addArgument("--secret-keyring");
cmdLine.addArgument("${secretRingPath}");
cmdLine.addArgument("--sign");
cmdLine.addArgument("--encrypt");
cmdLine.addArgument("-r");
cmdLine.addArgument("recipientName");
cmdLine.setSubstitutionMap(map);
DefaultExecutor executor = new DefaultExecutor();
int exitValue = executor.execute(cmdLine);