Shell命令从java失败但在手动运行时有效

时间:2016-12-13 18:04:15

标签: java bash shell gnupg

我正在尝试运行一些从我的控制台运行良好的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

1 个答案:

答案 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"