我需要将一个文本参数传递给使用 Apache Commons Exec 启动的命令的标准输入(出于好奇,命令是 gpg,参数是密钥库的密码;gpg 没有明确提供密码的参数,只有从标准输入接受它)。
另外,我需要它来支持 Linux 和 Windows。
在一个shell脚本中我会做
cat mypassphrase|gpg --passphrase-fd
或者
type mypassphrase|gpg --passphrase-fd
但是 type 在 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);