Necesito canalizar un argumento de texto al comando stdin de un comando ejecutado con Apache Commons Exec (para los curiosos, el comando es gpg y el argumento es la frase de paso para el almacén de claves; gpg no tiene un argumento para proporcionar la frase de paso explícitamente , solo para aceptarlo de stdin).Cómo canalizar un argumento de cadena a un ejecutable iniciado con Apache Commons Exec?
Además, necesito esto para admitir tanto Linux como Windows.
En un script de shell que haría
cat mypassphrase|gpg --passphrase-fd
o
type mypassphrase|gpg --passphrase-fd
pero el tipo no funciona en Windows ya que no es un archivo ejecutable, pero un comando integrado en el comando cmd (interpretado .exe).
El código no funciona (por el motivo anterior) está a continuación. Para generar un caparazón completo para esto es demasiado feo, estaba buscando una solución más elegante. Lamentablemente, existen algunos problemas de incompatibilidad entre la biblioteca BouncyCastle y PGP, por lo que no puedo usar una solución totalmente programática en el tiempo (muy corto) que tengo.
Gracias de antemano.
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);
respuesta muy agradable ! ¡Salvó mi día! – BetaRide