如何解决从 java 运行 bash 命令时的权限



>当我从控制台运行命令时,一切正常:

sudo -u oracle fgrep ...

当我使用 ProcessBuilder 从 Java 代码运行相同的命令时,sudo 不起作用,我需要将 chmod 设置为 775,否则我没有读取日志的权限。

为什么这不起作用?是否有在没有 chmod 775 的情况下读取日志的选项?

以下是我如何使用ProcessBuilder

ProcessBuilder pb = new ProcessBuilder("bash", "-c", command);
Process shell = pb.start();
InputStream is = shell.getInputStream();

由于您说日志文件chmod 775它有效,因此很明显您的进程没有权限。

你可以使用 sudo 运行你的 java:

sudo java ClassFileName

或者只是将sudo添加为传递给 bash 进程的数组中的第一个字符串:

command[0]="sudo -u oracle ";
//command[1]=commandname;
//command[2...n]=Other params;

假设用户oracle在 sudoers 列表中并且不会询问密码,这将像使用 sudo 时在命令行中的运行方式一样运行。

a.你不需要 bash -c,当你执行命令时,你有一个 shell。

二.该命令需要在空格上拆分,然后作为数组传递到 ProcessBuilder 中。

相关内容

  • 没有找到相关文章

最新更新