我正在尝试运行一些从我的控制台运行良好的bash命令,但在尝试从Java中进行相同的命令调用时失败。该命令不返回任何错误,无法生成所需的输出文件。该命令假设使用PGP工具(GPG)来解密文件并创建另一个文件。这在手动运行时有效,但不能在进行相同shell调用且没有错误的java应用程序中运行。
为了确保我甚至在容器文件夹上尝试了chmod 777,所以我认为它不是一个权限问题。
Shell Executor Code(Mkyong.com的Coutesy)
private static String executeCommand(String command) {
StringBuffer output = new StringBuffer();
Process p;
try {
p = Runtime.getRuntime().exec(command);
p.waitFor();
BufferedReader reader =
new BufferedReader(new InputStreamReader(p.getInputStream()));
String line = "";
while ((line = reader.readLine())!= null) {
output.append(line + "\n");
}
} catch (Exception e) {
e.printStackTrace();
}
return output.toString();
}
实际的Shell命令
gpg --output /main/decrypted-token.txt --passphrase test /main/token.asc
答案 0 :(得分:3)
如果命令在终端上正常工作但在从Java脚本调用时没有,那么我首先尝试的是在被调用的命令上指定Bash,看看是否有效:
bash -c "gpg --output /main/decrypted-token.txt --passphrase test /main/token.asc"
甚至更好:
/bin/bash -c "gpg --output /main/decrypted-token.txt --passphrase test /main/token.asc"