如何解决尝试从通过Java Process执行的Shell脚本中保存文件时,文件始终为空
我正在使用Java Process,尝试使用gpg解密文件并将其另存为.txt文件到本地文件系统中。如果我从我的终端执行此脚本,它将正常运行。当我通过java进程执行它时,它会在我的项目的根目录下创建文件,但它始终为空。我没有任何错误,因此很难诊断。
sh脚本:
gpg --batch --yes --passphrase-file pass --import private-key.asc
gpg --batch --yes --passphrase-file pass -d fileStillEncrypted.txt.pgp > decrypted_file.txt
上面的第一行有点多余,因为它只需要执行一次,但现在就留在那里。
我将文件权限更改为777进行测试,只是为了查看它是否是权限问题:
-rwxrwxrwx 1 user 767211335 6037 Aug 10 11:24 fileStillEncrypted.txt.pgp
-rw-r--r--@ 1 user 767211335 2667 Aug 10 11:36 private-key.asc
-rwxrwxrwx 1 user 767211335 141 Aug 21 08:33 decryptFile.bat
-rwxrwxrwx 1 user 767211335 178 Aug 21 09:08 decryptFile.sh
“ pass”文件包含pw,与sh脚本位于同一目录中。
Java代码:
public void decryptFile() {
Process p;
try {
String[] cmd = {"sh","/Users/user/path/to/decryptFile.sh"};
p = Runtime.getRuntime().exec(cmd);
p.waitFor();
} catch (IOException e) {
// TODO catch exception properly
e.printStackTrace();
} catch (InterruptedException e) {
// TODO catch exception properly
e.printStackTrace();
}
}
任何帮助将不胜感激,即使它只是关于如何调试Process的建议,因为我过去从未使用过它。
解决方法
太棒了。收到标准错误提示我,尽管我用路径打了我的shell脚本,但它没有在该路径中而是在Java应用程序的根路径中查找我引用的文件。我将文件移到那里,然后将它们捡起。起初我确实在文件“不适当的ioctl”中看到错误。我发现通过更新gnu中的以下配置并重新启动该文件即可正确填充该文件。
./.gnupg中的: 创建了gpg-agent.conf和gpg.conf
gpg.conf:
use-agent
pinentry-mode loopback
gpg-agent.conf:
allow-loopback-pinentry
然后需要使用以下命令重启gnu进程:
➜ .gnupg echo RELOADAGENT | gpg-connect-agent
OK
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。