Apache Commons Exec ile başlatılan bir komutun stdinine bir metin argümanı pipetlemem gerekiyor (meraklı için, komut gpg'dir ve argüman anahtar deponun paroladır; gpg'nin parolayı açıkça belirtmek için bir argümanı yoktur. sadece bunu stdin'den kabul etmek için). Apache Commons Exec ile başlatılan bir yürütülebilir dosyaya bir dize argümanı nasıl verilir?
Ayrıca, hem Linux hem de Windows'u desteklemek için buna ihtiyacım var. Bir kabuk komut dosyası olarak
yapardımcat mypassphrase|gpg --passphrase-fd
veya
type mypassphrase|gpg --passphrase-fd
ama (cmd yorumlanır yürütülebilir ancak komuta yerleşik bir komut olmasın da tip Windows üzerinde çalışmıyor .exe). (Aşağıdaki nedenden dolayı) kodunun (yukarıdaki nedenden) sorumlu olmadığı
. Bunun için tüm bir kabuğu yumurtlamak çok çirkin, daha zarif bir çözüm arıyordum. Ne yazık ki, BouncyCastle kütüphanesi ve PGP arasında bazı uyumsuzluk sorunları var, bu yüzden (çok kısa) zamanımda tamamen programlı bir çözüm kullanamıyorum.
Şimdiden teşekkürler. gpg
komut kabul etmeyeceğim çünkü
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);
Çok güzel cevabı: önceden bash uğramadan https://github.com/Macilias/Utils/blob/master/ShellUtils.java
temelde daha önce burada gösterildiği gibi boru kullanımını simüle edebilirsiniz ! Günümü kurtardım! – BetaRide